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:
Agora, a qualquer momento, o seguinte comando pode ser executado para desabilitar temporariamente a constraint:
Para desabilitar todas as constraints de uma só vez:
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. |