Databases Reference
In-Depth Information
SELECT USER_USERS.USERNAME
INTO nutzer
FROM USER_USERS;
INSERT INTO Zooprotokoll VALUES
(zoozaehler.NEXTVAL,datum,nutzer,:NEW.Gnr,
:NEW.Tname);
END;
Werden dann folgende Zeilen ausgeführt
INSERT INTO Gehege VALUES(4,'Heide',80);
INSERT INTO Tier VALUES(4,'Sauber','Baer');
INSERT INTO Tier VALUES(4,'Huber','Baer');
SELECT * FROM Zooprotokoll;
gibt es das folgende Ergebnis.
NR WANN WER GEHEGE TIERNAME
----- -------- -------- ---------- ------------
1 20.09.12 KLEUKER 4 Sauber
2 20.09.12 KLEUKER 4 Huber
Mit BEFORE und AFTER kann gesteuert werden, wann ein
Trigger ausgeführt werden soll. Dies geschieht entweder vor
der endgültigen Ausführung oder nach der Ausführung des
Ereignisses, das den Trigger auslöst. Im Beispiel hätte man ge-
nauso gut AFTER nutzen können, da es egal ist, wann der Ein-
trag erfolgt. Ein BEFORE-Trigger ist grundsätzlich flexibler, da
man z. B. mit einer Ausnahme die eigentliche Aktion, hier also
das Einfügen, abbrechen kann.
Dieser Trigger reagiert nur auf INSERT-Befehle, durch eine OR-
Verknüpfung kann dieser Trigger auch zusätzlich auf DELETE
und UPDATE reagieren. Nur bei UPDATE gibt es noch die zu-
sätzlichen Möglichkeiten, mit OF {Spaltenliste} die Reaktion
noch weiter nur auf die genannten Spalten zu reduzieren.
Die Angabe FOR EACH ROW gibt an, dass der Trigger für jede
Zeile, die betroffen ist, ausgeführt werden soll. Dies ist nur bei
Befehlen interessant, die mehrere Zeilen betreffen, was aber bei
INSERT durch die Angabe, dass die Ergebnisse einer Anfrage
eingetragen werden sollen, auch der Fall sein kann.
Die Angabe von FOR EACH ROW und die Nutzung von
BEFORE ermöglicht auch den genauen Zugriff auf die geänder-
ten Werte, dafür gibt es zwei spezielle Variablen :NEW und
:OLD , die jeweils vom Typ <Tabellenname> %ROWTYPE sind.
Dadurch kann auf die neu eingetragenen Werte und bei UP-
DATE und DELETE auf die alten Werte der jeweils betroffenen
Trigger-
varianten
271
Search WWH ::




Custom Search