Esiste un modo nel database Oracle per definire il trigger che verrà attivato in modo sincrono prima di COMMIT (e ROLLBACK se genera un'eccezione) nel caso in cui la tabella specificata venga modificata?Come definire un trigger ON COMMIT in Oracle?
risposta
Non esiste un meccanismo di attivazione ON COMMIT in Oracle. Ci sono soluzioni alternative comunque:
Si potrebbe utilizzare una vista materializzata con REFRESH ON COMMIT e aggiungere trigger per questo MV. Ciò 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 modificate).
È possibile utilizzare DBMS_JOB per rinviare un'azione dopo il commit. Questa sarebbe un'azione asincrona e potrebbe essere desiderabile in alcuni casi (ad esempio quando si desidera inviare un'e-mail dopo che la transazione ha avuto esito positivo). Se si ripristina la transazione principale, il lavoro verrà annullato. Il lavoro e la sessione principale sono indipendenti: se il lavoro fallisce, la transazione principale non verrà ripristinata.
Nel tuo caso, probabilmente potresti usare l'opzione (1). Personalmente non mi piace codificare la logica di business nei trigger poiché aggiunge molta complessità, ma tecnicamente penso che sarebbe fattibile.
Ho avuto un problema simile, ma l'opzione 1 non è stata purtroppo comoda per il mio caso.
Un'altra possibile soluzione, suggerita anche da "Chiedi a Tom", consiste nel specificare una stored procedure e chiamare semplicemente tale procedura prima di eseguire COMMIT. Questa soluzione è utile solo se si ha accesso al codice che esegue COMMIT, ma nel mio caso questa era la soluzione più semplice.
- 1. Creazione di un trigger in Oracle Express
- 2. Come sviluppare un trigger after serverror in Oracle?
- 3. ORACLE Rollback e trigger
- 4. Esiste un'opzione ignore-on-commit in mercurial?
- 5. Come usare Rollback/Commit in Oracle SQL
- 6. Trigger Oracle per creare un autonumber
- 7. Come inviare parametri arbitrari al trigger Oracle?
- 8. SQL Server ON DELETE Trigger
- 9. Il trigger MySQL in qualche modo causa il commit
- 10. Creazione di trigger su JDBC (Oracle)
- 11. trigger Hudson generazione quando svn commit
- 12. ORM per .Net ON Oracle
- 13. Trigger su INSERT ON DUPLICATE KEY
- 14. Quartz.Net trigger Lavoro pianificato On Demand
- 15. Oracle lag tra commit e select
- 16. È possibile disabilitare un trigger Oracle per la sessione corrente?
- 17. Transazioni Oracle di commit e rollback
- 18. Come creare un trigger MySQL in phpmyadmin
- 19. differenza prima e dopo il trigger in Oracle
- 20. oracle consente l'opzione di lettura senza commit?
- 21. Oracle equivalente di DISTINCT ON di Postgres?
- 22. Oracle: SET SERVEROUTPUT ON con Toad
- 23. Come creare un TRIGGER in SEQUELIZE (nodoJS)?
- 24. Perché Oracle sta perdendo dati durante il commit?
- 25. Come posso creare un trigger disabilitato in SQL Server 2005?
- 26. Passare una variabile in un trigger
- 27. Trigger Oracle Aggiornamento di un campo su un insert o su un aggiornamento
- 28. Trovare sequenze e trigger associati con una tabella Oracle
- 29. Ottenere il valore che ha attivato il trigger Oracle
- 30. Oracle trigger per scrivere tutte le Insert/Aggiornamenti su file
Grazie. L'opzione n. 1 è conveniente per il mio caso. –