谁能告诉我new和:new之间的区别

时间:2019-03-07 11:02:17

标签: oracle plsql database-trigger

CREATE OR REPLACE TRIGGER Print_salary_changes
  BEFORE DELETE OR INSERT OR UPDATE ON Emp_tab
  FOR EACH ROW
WHEN (new.Empno > 0)
DECLARE
    sal_diff number;
BEGIN
    sal_diff  := :new.sal  - :old.sal;
    dbms_output.put('Old salary: ' || :old.sal);
    dbms_output.put('  New salary: ' || :new.sal);
    dbms_output.put_line('  Difference ' || sal_diff);
END;

我无法理解上述查询中new和:new之间的区别

1 个答案:

答案 0 :(得分:3)

documentation中所述:

NEW子句中的

WHEN用于指定触发条件。

  

在WHEN子句中指定时,NEW和OLD关键字不是   被认为是绑定变量,因此不能以冒号(:)开头。   但是,在所有引用中,都必须在NEW和OLD之前加冒号   除了WHEN子句。

:NEW是用于表示触发器主体中新记录的伪列。

  

当触发行级触发器时,PL / SQL运行时系统创建并   填充两个伪记录OLD和NEW。他们叫   伪记录,因为它们具有某些(但不是全部)属性   记录。