Semantik
-
BEFORE
-Trigger werden vor Änderungen an den Systemtabellen ausgelöst.'AFTER'-Trigger werden nach Änderungen der Systemtabelle ausgelöst.ImportantWichtige RegelDer Ereignistyp
[BEFORE | AFTER]
eines DDL-Triggers kann nicht geändert werden. -
Wenn eine DDL-Anweisung einen Trigger auslöst, der eine Ausnahme auslöst (
BEFORE
oderAFTER
, absichtlich oder unabsichtlich), wird die Anweisung nicht festgeschrieben.Das heißt, Ausnahmen können verwendet werden, um sicherzustellen, dass ein DDL-Vorgang fehlschlägt, wenn die Bedingungen nicht genau wie beabsichtigt sind. -
DDL-Trigger-Aktionen werden nur ausgeführt, wenn die Transaktion, in der der betroffene DDL-Befehl ausgeführt wird, commiting ist.Übersehen Sie nie die Tatsache, dass in einem
AFTER
-Trigger genau das möglich ist, was nach einem DDL-Befehl ohne Autocommit möglich ist.Sie können beispielsweise keine Tabelle erstellen und diese dann im Trigger verwenden. -
Bei “
CREATE OR ALTER
”-Anweisungen wird je nach vorheriger Existenz des Objekts einmalig ein Trigger beimCREATE
-Ereignis oder beimALTER
-Ereignis ausgelöst.BeiRECREATE
-Anweisungen wird ein Trigger für dasDROP
-Ereignis ausgelöst, wenn das Objekt existiert, und für dasCREATE
-Ereignis. -
ALTER
- undDROP
-Ereignisse werden im Allgemeinen nicht ausgelöst, wenn der Objektname nicht existiert.Ausnahme siehe Punkt 6. -
Die Ausnahme von Regel 5 ist, dass
BEFORE ALTER/DROP USER
das Feuer auslöst, auch wenn der Benutzername nicht existiert.Dies liegt daran, dass diese Befehle darunter DML in der Sicherheitsdatenbank ausführen und die Überprüfung nicht durchgeführt wird, bevor der Befehl darauf ausgeführt wird.Dies ist bei eingebetteten Benutzern wahrscheinlich anders, schreiben Sie also keinen Code, der davon abhängt. -
Wenn eine Ausnahme ausgelöst wird, nachdem der DDL-Befehl seine Ausführung gestartet hat und bevor 'AFTER'-Trigger ausgelöst werden, werden 'AFTER'-Trigger nicht ausgelöst.
-
Verpackte Prozeduren und Trigger lösen einzelne
{CREATE | ÄNDERN | DROP} {VERFAHREN | FUNCTION}
auslöst.