4
在Oracle中編寫行級觸發器時,我知道您可以使用OLD
和NEW
僞記錄來引用觸發觸發器的行的新舊狀態。
我知道在INSERT
觸發器OLD
不包含任何數據,但我不知道這是如何影響該觸發器的WHEN
子句的評估。舉例來說,如果我有以下觸發:OLD引用在Oracle插入觸發器的WHEN原因中評估什麼?
CREATE OR REPLACE TRIGGER mung_row
BEFORE INSERT OR UPDATE ON some_table
FOR EACH ROW
BEGIN
:NEW.foo = 'some val';
END;
,我想修改該觸發器僅在更新時富先前空運行,但總是在插入跑,我能滿足的更新部分在插入的情況下
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;
這會帶來問題:通過添加WHERE
條款的變化? OLD.foo將在INSERT
中評估什麼?
我知道,我可能分裂INSERT
和UPDATE
觸發器或觸發器主體使用INSERTING
/UPDATING
/DELETING
,但我寧願沒有啓發這個問題的情況。