Wie definiert man einen Trigger ON COMMIT in Oracle?
Gibt es eine Möglichkeit in der oracle-Datenbank trigger definieren, die synchron abgefeuert, bevor BEGEHEN (und ROLLBACK, wenn es wirft eine Ausnahme) im Falle einer angegebenen Tabelle geändert wird?
InformationsquelleAutor der Frage Volodymyr Frolov | 2010-11-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keinen ON COMMIT trigger-Mechanismus in Oracle. Es gibt Möglichkeiten, jedoch:
Könnten Sie eine materialisierte Ansicht mit ON COMMIT REFRESH und Trigger hinzufügen, um das MV. Dieses würde Ihnen erlauben, um die trigger-Logik, wenn eine Basistabelle modifiziert wurde zum Zeitpunkt der Begehung. Wenn der trigger löst einen Fehler aus, so wird die Transaktion zurückgesetzt werden (Sie verlieren alle ungebunden-änderungen).
Können Sie DBMS_JOB zu verschieben, eine Aktion, die nach dem commit. Dies wäre eine asynchrone Aktion und kann wünschenswert sein, in einigen Fällen (zum Beispiel, wenn Sie möchten, senden Sie eine E-Mail, nachdem die Transaktion erfolgreich war). Wenn Sie ein Rollback für die primär-Transaktion ist, wird der job abgebrochen. Der job und die primäre Sitzung sind voneinander unabhängig: wenn der job fehlschlägt, wird der Haupt-Transaktion wird nicht zurückgerollt werden.
In Ihrem Fall könnten Sie wahrscheinlich verwenden Sie die option (1). Ich personnaly nicht gerne code-business-Logik in Triggern, da es fügt eine Menge von Komplexität, aber technisch ich denke, es wäre machbar.
InformationsquelleAutor der Antwort Vincent Malgrat
Ich hatte ein ähnliches problem, aber option 1 war leider nicht geeignet für meinen Fall.
Andere mögliche Lösung, die auch vorgeschlagen von "Ask Tom", geben Sie eine gespeicherte Prozedur und rufen Sie einfach das Verfahren vor dem ausführen des COMMIT.
Diese Lösung ist nur praktisch, wenn Sie Zugriff auf den code führt den COMMIT aus, aber für meinen Fall war dies die einfachste Lösung.
InformationsquelleAutor der Antwort David Gausmann