Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Benötigt ein Insert-Trigger eine Commit-Anweisung?

Trigger benötigen nicht nur kein COMMIT, in das Sie auch keins einfügen können:Ein Trigger wird nicht kompiliert, wenn der Code des Hauptteils ein COMMIT (oder ein Rollback) enthält.

Dies liegt daran, dass Trigger während einer Transaktion ausgelöst werden. Wenn der Trigger ausgelöst wird, ist die aktuelle Transaktion noch nicht abgeschlossen. Da COMMIT eine Transaktion beendet, die sie in Triggern zulässt, würde die Arbeitseinheit unterbrochen.

Daher werden Änderungen, die in einem Trigger ausgeführt werden, von der besitzenden Transaktion festgeschrieben (oder rückgängig gemacht), die die DML ausgegeben hat, die den Trigger ausgelöst hat.

Trigger können zwar unter dem PRAGMA AUTONOMOUS_TRANSACTION laufen, müssen dann aber ein COMMIT haben. Dies ist jedoch ein Grenzfall, da es in Oracle nur wenige sinnvolle Verwendungen von verschachtelten Transaktionen gibt.