Habilitando e desabilitando constraints durante uma transação no Oracle

Categoria: Oracle
Publicado em 10 de Julho de 2013

Existe uma possibilidade mais simples de habilitar e desabilitar constraints no Oracle, válida apenas para uma única transação. Se utilizada, muda a verificação da constraint para tempo de commit, ao invés de verificar a cada comando DML executado.

A técnica consiste em criar a constraint com a palavra "DEFERRABLE". Exemplo:

1
2
3
4
ALTER TABLE TABELA_VENDAS
ADD CONSTRAINT FK_COD_CLIENTE FOREIGN KEY(COD_CLIENTE) 
   REFERENCES TABELA_CLIENTES(COD_CLIENTE) DEFERRABLE
;

Agora, a qualquer momento, o seguinte comando pode ser executado para desabilitar temporariamente a constraint:

1
2
SET CONSTRAINT FK_COD_CLIENTE DEFERRED
;

Para desabilitar todas as constraints de uma só vez:

1
2
SET CONSTRAINT ALL DEFERRED
;

Para reativar as constraints os últimos dois comandos podem ser executados substituindo-se DEFERRED para IMMEDIATE. Se um COMMIT for executado com sucesso, todas as constraints envolvidas serão automaticamente reativadas, tendo seu valor mudado para IMMEDIATE.

Durante o COMMIT dos dados, caso uma ou mais linhas viole alguma constraint existente, os dados não serão comitados e um ROLLBACK é aplicado.

 

Copyright © Fernando Hidemi Uchiyama 2010 - Todos os direitos reservados