为什么触发器主体中绑定变量的触发器伪记录占位符而不是WHEN?

时间:2019-05-10 18:34:54

标签: oracle plsql oracle11g database-trigger

documentation指出:

  

在简单触发器的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;

为什么在一种情况下而不是另一种情况下绑定变量的伪记录(相关名称)占位符?

1 个答案:

答案 0 :(得分:1)

  

“ Oracle的创建者是否愿意加入?”

我不是创作者之一,但无论如何我都会鸣叫。

这些伪记录引用不是绑定变量的占位符...

WHEN (new.mgr_start_date < old.mgr_start_date)

...,因为此行是触发器规范的一部分。它定义了触发触发器的条件。它是在指定字段名称而不是值。

这些伪记录引用是占位符...

:new.mgr_start_date := :old.mgr_start_date;

...,因为它们从记录的旧版本和新版本中引用实际值