在简单触发器的trigger_body或复合触发器的tps_body中,关联名称是绑定变量的占位符。使用以下语法引用伪记录的字段:
:pseudorecord_name.field_name
在条件触发器的WHEN子句中,关联名称不是绑定变量的占位符。因此,请使用前面的语法省略冒号。
我的工作示例如下:
CREATE OR REPLACE TRIGGER started
BEFORE UPDATE OF mgr_start_date ON department
FOR EACH ROW
WHEN (new.mgr_start_date < old.mgr_start_date)
BEGIN
:new.mgr_start_date := :old.mgr_start_date;
DBMS_OUTPUT.PUT_LINE('Rejected backdate of mgr_start_date.');
END;
为什么在一种情况下而不是另一种情况下绑定变量的伪记录(相关名称)占位符?
答案 0 :(得分:1)
“ Oracle的创建者是否愿意加入?”
我不是创作者之一,但无论如何我都会鸣叫。
这些伪记录引用不是绑定变量的占位符...
WHEN (new.mgr_start_date < old.mgr_start_date)
...,因为此行是触发器规范的一部分。它定义了触发触发器的条件。它是在指定字段名称而不是值。
这些伪记录引用是占位符...
:new.mgr_start_date := :old.mgr_start_date;
...,因为它们从记录的旧版本和新版本中引用实际值。