Databases Reference
In-Depth Information
Zeile zugegriffen werden. Nur bei einem BEFORE-Trigger kön-
nen so auch die neuen Werte noch verändert werden.
Die WHEN-Zeile erlaubt die Angabe einer Bedingung, die zu-
sätzlich zum auslösenden Ereignis geprüft werden soll. Dabei
ist die Zeile nur bei Triggern mit FOR EACH ROW erlaubt und
bezieht sich auf die aktuell behandelte Zeile. Die veränderten
Werte können auch in der WHEN-Bedingung referenziert wer-
den, dabei werden hier allerdings irritierend NEW und OLD statt
:NEW und :OLD genutzt. Beim vorgestellten Trigger könnte
man z. B. verhindern, dass neue Hasen auch in die Protokollta-
belle eingetragen werden. Dazu wird nach FOR EACH ROW die
Zeile
WHEN (NEW.Gattung<>'Hase')
ergänzt. Man beachte die syntaktisch notwendigen Klammern.
Die WHEN-Bedingung macht die Ausführung etwas kürzer, da
schnell festgestellt werden kann, ob der Trigger ausgeführt
werden muss. Prinzipiell kann man die Prüfung der Bedingung
auch in den PL/SQL-Teil der Aktion des Triggers einbauen.
Der Bedeutung der Zeile FOR EACH ROW soll jetzt mit einem
kleinen Beispiel verdeutlicht werden. Dazu wird zunächst fol-
gende Spieltabelle angelegt.
CREATE TABLE Tr(
X NUMBER,
Y NUMBER
);
INSERT INTO Tr VALUES (1,3);
INSERT INTO Tr VALUES (1,4);
INSERT INTO Tr VALUES (1,5);
SELECT * FROM Tr;
Die Ausgabe lautet wie folgt.
Trigger einmal
pro Zeile oder
pro Aktion
X Y
---------------------- ----------------------
1 3
1 4
1 5
Dann wird ein Trigger angelegt, der sich nur auf die gesamte
Tabelle und nicht die einzelnen Zeilen bezieht.
CREATE OR REPLACE TRIGGER TrOhneEach
BEFORE UPDATE
ON Tr
BEGIN
DBMS_OUTPUT.PUT_LINE('TrOhneEach');
272
Search WWH ::




Custom Search