## CREATE TRIGGER-Anweisung (create_trigger_statement)

Die CREATE TRIGGER-Anweisung (create_trigger_statement) definiert einen Trigger für eine Basistabelle.

### Syntax

<create_trigger_statement> ::= CREATE TRIGGER <trigger_name> FOR <table_name>
AFTER <trigger_event>,... EXECUTE (<routine>) [WHENEVER <search_condition>]

<trigger_event> ::= INSERT
| UPDATE [(<column_list>)]
| DELETE
<column_list> ::= <column_name> | <column_list>,<column_name>

### Beispiele

SQL-Tutorial, Datenbanktrigger

### Erläuterung

Ein Trigger ist eine spezielle Datenbankprozedur, die einer Basistabelle zugeordnet ist. Ein Trigger kann nicht explizit ausgeführt werden, sondern wird vom Datenbanksystem automatisch ausgeführt, wenn definierte Ereignisse trigger_event auf der Tabelle eintreten.

Wenn im Tabellennamen kein Schema angegeben ist, wird implizit das aktuelle Schema angenommen.

Der Tabellenname muss eine existierende Tabelle des Schemas identifizieren. Der aktuelle Benutzer muss Eigentümer der angegebenen Tabelle sein.

#### <trigger_event>

Das Trigger-Ereignis trigger_event definiert, wodurch der Trigger ausgelöst wird. Der Aufruf des Triggers erfolgt immer nach der fehlerfreien Bearbeitung des auslösenden Ereignisses.

INSERT: Das Trigger-Ereignis INSERT bewirkt für jede Zeile, die in die Tabelle eingefügt wird, eine Ausführung des Triggers.

UPDATE: Das Trigger-Ereignis UPDATE bewirkt für jede Änderung einer Zeile der Tabelle eine Ausführung des Triggers. Wenn eine Spaltenliste column_list angegeben ist, erfolgt der Aufruf nur, wenn eine der in der Spaltenliste enthaltenen Spalten verändert wurde.

DELETE: Das Trigger-Ereignis DELETE bewirkt für jede gelöschte Zeile der Tabelle einen Aufruf des Triggers.

Zu jedem Trigger-Ereignis darf pro Tabelle maximal ein Trigger definiert werden.

Sie können bei einer INSERT-, UPDATE- bzw. DELETE-Anweisung durch Angabe von IGNORE TRIGGER erreichen, dass das Trigger-Ereignis INSERT, UPDATE bzw. DELETE ignoriert wird.

#### <routine>

Beachten Sie folgende Informationen zur Trigger-Routine routine.

Jeder INSERT-Trigger besitzt implizit für jede Spalte der Tabelle eine korrespondierende Variable NEW.<column_name>. Bei der Ausführung des Triggers besitzt diese Variable den Wert der korrespondierenden Spalte der eingefügten Zeile. Die Angabe von NEW ist nur für in routine_sql_statements genannte SQL-Anweisungen erlaubt. Für die anderen Anweisungen führt die Angabe von NEW zu einem Fehler.

Jeder UPDATE-Trigger besitzt implizit für jede Spalte der Tabelle die korrespondierenden Variablen NEW.<column_name> und OLD.<column_name>. Bei der Ausführung des Triggers besitzt die Variable OLD.<column_name> den Wert der korrespondierenden Spalte vor und NEW.<column_name> den Wert der Spalte nach der Änderung der Zeile. Die Angabe von NEW und OLD sind optional.

Jeder DELETE-Trigger besitzt implizit für jede Spalte der Tabelle eine korrespondierende Variable OLD.<column_name>. Bei der Ausführung des Triggers besitzt diese Variable den Wert der korrespondierenden Spalte der gelöschten Zeile. Die Angabe von OLD ist nur für in routine_sql_statements genannte SQL-Anweisungen erlaubt. Für die anderen Anweisungen führt die Angabe von OLD zu einem Fehler.

In SQL-Anweisungen statement, die in Triggern verwendet werden und zu den in routine_sql_statements genannten Anweisungen gehören, müssen :NEW und :OLD immer mit Doppelpunkt verwendet werden (Beispielzeile UPDATE hotel.room SET hno = :NEW.hno WHERE hno = :OLD.hno).

In SQL-Anweisungen, die in Triggern verwendet werden und nicht zu den in routine_sql_statements genannten Anweisungen gehören, müssen NEW und OLD immer ohne Doppelpunkt verwendet werden (Beispielzeile IF NEW.hno <> OLD.hno).

Wird der Trigger durch STOP mit einer Fehlernummer ungleich Null beendet, scheitert die gesamte SQL-Anweisung, die den Trigger ausgelöst hat.

Die SUBTRANS-Anweisung ist innerhalb eines Triggers nicht zulässig.

Bei Angabe einer WHENEVER-Bedingung wird der Trigger nur ausgeführt, wenn die Suchbedingung erfüllt ist. Die Bedingung darf keine Subquery und keine Set-Funktionen enthalten.

Siehe auch:

CREATE SYSTEM TRIGGER-Anweisung

CREATE DBPROC[EDURE]-Anweisung (create_dbproc_statement)