2010-09-05 3 views
9

Kann jemand erklären, Unterschied zwischen "vor" und "nach" Trigger in Oracle 10g mit einem Beispiel?Unterschied vor und nach Trigger in Orakel

+0

Ich war mir immer noch nicht sicher, was Sie in Bezug auf Einfachheit suchten, also löschte ich meine Antwort. Jemand anderes mag eine gute Idee haben. –

+0

Für jeden kleinen Zweifel stelle ich eine Frage im Stapelüberlauf ohne nachzudenken .....(Ich denke, ich sollte nicht tun) .... Ich habe das Trigger-Konzept jetzt verstanden.Hierher werde ich denken, bevor Sie die Frage ... – Jagan

Antwort

22

Zuerst werde ich meine Antwort beginnen durch die Definition Trigger: ein Trigger ist eine gespeicherte Prozedur, die ausgeführt wird, wenn eine Zeile hinzugefügt, geändert oder gelöscht werden.

Trigger können VOR die Aktion ausgeführt wird oder NACH die getroffenen Maßnahmen ausgeführt wird.

BEFORE Trigger werden normalerweise verwendet, wenn die Validierung stattfinden muss, bevor die Änderung akzeptiert wird. Sie werden ausgeführt, bevor Änderungen an der Datenbank vorgenommen werden. Angenommen, Sie führen eine Datenbank für eine Bank. Sie haben eine Tabelle accounts und eine Tabelle transactions. Wenn ein Benutzer eine Auszahlung von seinem Konto tätigt, möchten Sie sicherstellen, dass der Benutzer genügend Guthaben auf seinem Konto für seine Auszahlung hat. Der BEFORE Trigger ermöglicht dies und verhindert, dass die Zeile in transactions eingefügt wird, wenn die Balance in accounts nicht ausreicht.

AFTER Auslöser werden normalerweise verwendet, wenn Informationen aufgrund einer Änderung in einer separaten Tabelle aktualisiert werden müssen. Sie werden ausgeführt, nachdem Änderungen an der Datenbank vorgenommen wurden (nicht unbedingt festgeschrieben). Gehen wir zurück zu unserem Beispiel zurück. Nach einer erfolgreichen Transaktion möchten Sie balance in der Tabelle accounts aktualisiert werden. Ein AFTER Trigger ermöglicht Ihnen, genau das zu tun.

+1

+1 Ich würde nur hinzufügen, dass einige Trigger-Validierungen in Zeile AFTER durchgeführt werden müssen Trigger, weil die Spaltenwerte nur in AFTER-Triggern "fixiert" sind. In einem BEFORE-Trigger konnten Sie einige komplexe Regeln validieren und übergeben, die auf dem folgenden Wert basieren: NEW.col nur für den Wert von: NEW.col, der später im Trigger geändert wird, sodass die Regel verletzt wird. –

6

Ich bin mir nicht ganz sicher, was Sie wissen wollen, also werde ich diese grundlegende beibehalten.

Bevor Trigger

  • Gemäß der Name, sind diese Trigger vor dem Erstellen der Zeile in der Tabelle gebrannt. Da die Zeile noch nicht erstellt wurde, haben Sie vollen Zugriff auf das Feld: new.table_element. Dies ermöglicht eine Datenbereinigung und -einheitlichkeit, wenn unerwünschte/fehlerhafte Daten versucht werden, eingefügt/aktualisiert zu werden. Dies ist nur ein einfaches Beispiel, aber Sie müssen den Vorher-Trigger immer dann verwenden, wenn Sie Zugriff auf die ": new" -Daten benötigen.

Nach Trigger

  • Da die nach dem Trigger ausgelöst wird, sobald die Zeile bereits erstellt worden ist, werden diese Trigger typischerweise verwendet, wenn Sie Logik wollen aufgrund der Reihe auftreten. Wenn Sie beispielsweise eine Adresstabelle haben und ein Benutzer seine Adresse aktualisiert, sollten Sie die Adressreferenzen in einer XRef-Tabelle bei der Erstellung aktualisieren (falls Sie auch alle alten Adressen behalten). Im Gegensatz zum Vor-Trigger haben Sie auch keinen Zugriff, um Spaltenwerte zu ändern, da die Zeile bereits in der Tabelle vorhanden ist.
1

BEVOR TRIGGER werden verwendet, wenn die Triggeraktion bestimmen soll, ob die auslösenden Anweisungen abgeschlossen werden sollen. Durch Verwendung von BEFORE TRIGGERS kann der Benutzer unnötige Verarbeitung der auslösenden Anweisung eliminieren, aber NACH TRIGGERS werden die auslösenden Anweisungen verwendet sollte vor dem Ausführen der Triggeraktion abgeschlossen sein.

+0

Bitte bearbeiten Sie Ihre vorhandene Antwort, anstatt eine andere zu duplizieren. – wonea