A linguagem SQL > DDL > Tabelas > Opções das Restrições
Opções das Restrições tl_logo2.jpg

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,
    ...
);

bthome.gifTopo


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,
    ...
);

bthome.gifTopo


Realizado por Turtle Learning ®. Última alteração em 2011-08-14