Ich weiß, dass Sie beim Schreiben eines Triggers auf Zeilenebene in Oracle die Funktion OLD
y NEW
Pseudo-Datensätze, um auf den alten und neuen Zustand der Zeile zu verweisen, die den Auslöser ausgelöst hat.
Ich weiß, dass in einem INSERT
Auslöser OLD
keine Daten enthält, aber ich bin mir nicht sicher, wie sich dies auf die Auswertung einer WHEN
Klausel für diesen Auslöser. Zum Beispiel, wenn ich den folgenden Auslöser habe:
CREATE OR REPLACE TRIGGER mung_row
BEFORE INSERT OR UPDATE ON some_table
FOR EACH ROW
BEGIN
:NEW.foo = 'some val';
END;
und ich diesen Trigger so ändern möchte, dass er nur bei einer Aktualisierung ausgeführt wird, wenn foo zuvor null war, aber immer bei einer Einfügung ausgeführt wird, könnte ich den Aktualisierungsteil der Änderung erfüllen, indem ich eine WHERE
Klausel:
CREATE OR REPLACE TRIGGER mung_row
BEFORE INSERT OR UPDATE ON some_table
FOR EACH ROW
WHEN (OLD.foo IS NULL)
BEGIN
:NEW.foo = 'some val';
END;
Wird dies im Fall des Einfügens Probleme verursachen? Was wird OLD.foo in der Datei INSERT
?
Ich bin mir bewusst, dass ich die INSERT
y UPDATE
Auslöser oder Verwendung INSERTING
/ UPDATING
/ DELETING
im Auslösergehäuse, aber in dem Fall, der diese Frage ausgelöst hat, würde ich das lieber nicht tun.