Opções das Restrições |
Neste módulo vamos ver:
Desactivar e activar uma restrição
A cláusula DISABLE pode ser utilizada no comando ALTER TABLE para desactivar uma restrição. A partir desse momento a base de dados deixa de a validar, o que pode acelerar operações de INSERT ou UPDATE maciço, evitando a remoção da restrição. A restrição pode ser reactivada recorrendo à clausula ENABLE do comando ALTER TABLE.
O comando abaixo lista todas as opções disponíveis sobre a tabela EMP:
select * from user_constraints where table_name = 'EMP'; |
OWNER CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME SEARCH_CONDITION R_OWNER R_CONSTRAINT_NAME DELETE_RULE STATUS DEFERRABLE DEFERRED VALIDATED GENERATED BAD RELY LAST_CHANGE INDEX_OWNER INDEX_NAME INVALID VIEW_RELATED ------------------------------ ------------------------------ --------------- ------------------------------ ---------------- ------------------------------ ------------------------------ ----------- -------- -------------- --------- ------------- -------------- --- ---- ------------------------- ------------------------------ ------------------------------ ------- -------------- HR FK_EMP_REF_DEPT R EMP HR PK_DEPT CASCADE ENABLED NOT DEFERRABLE IMMEDIATE VALIDATED USER NAME 06.07.04 HR PK_EMP P EMP ENABLED NOT DEFERRABLE IMMEDIATE VALIDATED USER NAME 06.07.03 HR PK_EMP HR FK_EMP_REF_EMP R EMP HR PK_EMP NO ACTION ENABLED NOT DEFERRABLE IMMEDIATE VALIDATED USER NAME 06.07.03 HR NN_EMP_DEPTNO C EMP "DEPTNO" IS NOT NULL ENABLED NOT DEFERRABLE IMMEDIATE VALIDATED USER NAME 06.07.03 HR SYS_C004034 C EMP "EMPNO" IS NOT NULL ENABLED NOT DEFERRABLE IMMEDIATE VALIDATED GENERATED NAME 06.04.08 5 rows selected |
O comando abaixo exemplifica a desactivação / activação da restrição FK_EMP_REF_DEPT sobre a tabela EMP:
alter table EMP disable constraint FK_EMP_REF_DEPT; alter table EMP enable constraint FK_EMP_REF_DEPT; |
alter table EMP succeeded. alter table EMP succeeded. |
A opção DISABLE pode ser utilizada durante o CREATE TABLE, o que permite criar a restrição ao mesmo tempo que se cria a tabela, mas deixando-a desactivada. Isto implica que o Oracle não a vai validar:
create table emp ( ... ename varchar2(10) CONSTRAINT chk_upp_nam CHECK (ename=upper(ename)) DISABLE, ... ); |
Tratamento dos erros após activação da restrição
A cláusula EXCEPTIONS INTO é utilizada na criação da restrição e identifica uma tabela para onde são enviadas as linhas que não passam na validação da restrição. A consulta a essa tabela permite identificar as linhas que terão que ser corrigidas manualmente. A existência desta cláusula evita a ocorrência de erros nos INSERTS ou UPDATES maciços, já que as linhas que causam erro são enviadas para a tabela de erros evitando a interrupção da operação.
create table EMP ( ... ename varchar2(10) CONSTRAINT chk_upp_nam CHECK (ename=upper(ename)) EXCEPTIONS INTO tab_erros, ... ); |
Realizado por Turtle Learning ®. Última alteração em 2011-08-14