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

Posted

技术标签:

【中文标题】谁能告诉我 new 和 :new 之间的区别【英文标题】:Can anyone tell me the difference between new and :new 【发布时间】:2019-03-07 11:02:16 【问题描述】:
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】:

详见documentation:

WHEN子句中的NEW用于指定触发条件。

当在 WHEN 子句中指定时,NEW 和 OLD 关键字不是 被认为是绑定变量,因此前面没有冒号 (:)。 但是,在所有引用中,您必须在 NEW 和 OLD 之前使用冒号 除了 WHEN 子句。

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

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

【讨论】:

以上是关于谁能告诉我 new 和 :new 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

C ++中new和new []之间有什么区别?

new int[0] 和 new int[] 之间有啥区别吗[重复]

谁能告诉我贝宝按钮之间的区别[关闭]

Object o = makeMeAnObjectPlease(); 之间的区别和对象 o = new Object();

在 C++ 中,数组分配的 new 和 new[] 有啥区别

紧凑型和常规尺寸类之间的区别