CREATE TRIGGER-Anweisung (create_trigger_statement) 
Die CREATE TRIGGER-Anweisung (
create_trigger_statement) definiert einen Trigger für eine Basistabelle (siehe Tabelle).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>

Der Trigger sorgt dafür, daß beim Ändern einer Hotel-Nummer in der Tabelle
hotel die Änderung der Hotel-Nummer in der Tabelle raum ebenfalls durchgeführt wird.CREATE TRIGGER hotel_update FOR hotel AFTER UPDATE EXECUTE (
TRY
IF NEW.hnr <> OLD.hnr
THEN UPDATE reisen.raum SET hnr = :NEW.hnr WHERE hnr = :OLD.hnr;
CATCH
IF $rc <> 100
THEN STOP ($rc, 'unerwarteter Fehler');
)
Erläuterung
Ein Trigger ist eine spezielle
Datenbankprozedur, die einer Basistabelle zugeordnet ist. Diese Datenbankprozedur kann nicht explizit durch die CALL-Anweisung ausgeführt werden, sondern wird von SAP DB automatisch ausgeführt, wenn definierte Ereignisse (trigger_event) auf der Tabelle eintreten.Zur Formulierung eines Triggers stellt SAP DB eine Sprache (spezielle SQL-Syntax, die um Variablen, Kontrollstrukturen und Möglichkeiten zur Fehlerbehandlung erweitert wurde) bereit, die verwendet werden kann, um Datenbankprozeduren und Trigger zu definieren.
Der angegebene Tabellenname muß eine existierende Basistabelle des aktuellen Benutzers bezeichnen.
Trigger-Ereignis
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.
Trigger-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 optional.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 ist 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 optional.
In SQL-Anweisungen (
In SQL-Anweisungen (
statement), 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.hnr <> OLD.hnr).Siehe auch:
routineWird 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.