Databases Reference
In-Depth Information
END;
Dazu kommt ein zweiter sehr ähnlicher Trigger, der sich aber
auf jede betroffene Zeile bezieht, weiterhin zeigt er eine Spiele-
rei mit der Veränderung der eingetragenen Werte.
CREATE OR REPLACE TRIGGER TrMitEach
BEFORE UPDATE
ON Tr
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('TrMitEach');
:NEW.X := :NEW.Y;
:NEW.Y := :OLD.X;
END;
Die Ausführung der folgenden Befehle
UPDATE TR
SET Y=Y+1
WHERE X=1;
SELECT * FROM Tr;
ergibt dann folgendes Ergebnis.
TrOhneEach
TrMitEach
TrMitEach
TrMitEach
X Y
---------------------- ----------------------
4 1
5 1
6 1
Man erkennt, dass der TriggerMitEach dreimal, d. h. für jede
betroffene Zeile, ausgeführt wurde.
Das folgende Beispiel zeigt einen Trigger, der das Hinzufügen
oder Ändern einer Art nur erlaubt, wenn es überhaupt ein Ge-
hege gibt, in das ein solches Tier mit seinem Flächenanspruch
eingefügt werden kann. Dies zeigt die Möglichkeit, in Triggern
auf mehrere Tabellen zuzugreifen und eine Aktion gegebenen-
falls abzubrechen. Ein Cursor bestimmt für jedes Gehege die
noch freie Fläche, dazu wird von der Gesamtfläche des Geheges
die Summe der minimal notwendigen Flächen der einzelnen
Tiere abgezogen. Im ersten Teil wird überprüft, ob es eventuell
ein leeres Gehege gibt, da dieses im Cursor nicht berücksichtigt
wurde. Gibt es ein leeres Gehege so wird die maximale freie
Fläche auf die Fläche des größten leeren Geheges gesetzt. Da-
Trigger für meh-
rere Tabellen
273
Search WWH ::




Custom Search