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

Wie definiere ich einen Trigger ON COMMIT in Oracle?

In Oracle gibt es keinen ON COMMIT-Triggermechanismus. Es gibt jedoch Problemumgehungen:

  1. Sie könnten eine materialisierte Ansicht mit ON COMMIT REFRESH verwenden und diesem MV Trigger hinzufügen. Dies würde es Ihnen ermöglichen, die Logik auszulösen, wenn eine Basistabelle zum Zeitpunkt der Übergabe geändert wurde . Wenn der Trigger einen Fehler auslöst, wird die Transaktion rückgängig gemacht (Sie verlieren alle nicht festgeschriebenen Änderungen).

  2. Sie können DBMS_JOB verwenden, um eine Aktion nach dem Festschreiben zu verschieben. Dies wäre eine asynchrone Aktion und kann in einigen Fällen wünschenswert sein (z. B. wenn Sie eine E-Mail senden möchten, nachdem die Transaktion erfolgreich war). Wenn Sie die primäre Transaktion zurücksetzen, wird der Auftrag abgebrochen. Der Job und die primäre Sitzung sind unabhängig:Wenn der Job fehlschlägt, wird die Haupttransaktion nicht zurückgesetzt.

In Ihrem Fall könnten Sie wahrscheinlich Option (1) verwenden. Ich persönlich mag es nicht, Geschäftslogik in Triggern zu codieren, da dies viel Komplexität hinzufügt, aber technisch denke ich, dass es machbar wäre.