Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como definir um gatilho ON COMMIT no Oracle?


Não há mecanismo de gatilho ON COMMIT no Oracle. No entanto, existem soluções alternativas:

  1. Você pode usar uma visão materializada com ON COMMIT REFRESH e adicionar triggers a este MV. Isso permitiria que você acionasse a lógica quando uma tabela base fosse modificada no momento da confirmação . Se o gatilho gerar um erro, a transação será revertida (você perderá todas as alterações não confirmadas).

  2. Você pode usar DBMS_JOB para adiar uma ação após a confirmação. Esta seria uma ação assíncrona e pode ser desejável em alguns casos (por exemplo, quando você deseja enviar um e-mail após a transação ter sido bem-sucedida). Se você reverter a transação principal, o trabalho será cancelado. O trabalho e a sessão primária são independentes:se o trabalho falhar, a transação principal não será revertida.

No seu caso, você provavelmente poderia usar a opção (1). Eu pessoalmente não gosto de codificar lógica de negócios em gatilhos, pois adiciona muita complexidade, mas tecnicamente acho que seria possível.