Oracle
 sql >> Database >  >> RDS >> Oracle

Come definire un trigger ON COMMIT in Oracle?

Non esiste un meccanismo di trigger ON COMMIT in Oracle. Esistono tuttavia soluzioni alternative:

  1. È possibile utilizzare una vista materializzata con AGGIORNAMENTO SU COMMIT e aggiungere trigger a questa MV. Ciò ti consentirebbe di attivare la logica quando una tabella di base è stata modificata al momento del commit . Se il trigger genera un errore, la transazione verrà annullata (perderai tutte le modifiche non confermate).

  2. È possibile utilizzare DBMS_JOB per rinviare un'azione dopo il commit. Si tratterebbe di un'azione asincrona e potrebbe essere auspicabile in alcuni casi (ad esempio quando si desidera inviare un'e-mail dopo che la transazione è andata a buon fine). Se si annulla la transazione principale, il lavoro verrà annullato. Il lavoro e la sessione primaria sono indipendenti:se il lavoro non riesce, non verrà eseguito il rollback della transazione principale.

Nel tuo caso, potresti probabilmente utilizzare l'opzione (1). Personalmente non mi piace codificare la logica aziendale nei trigger poiché aggiunge molta complessità, ma tecnicamente penso che sarebbe fattibile.