在问题中 - 当更新完全省略触发器中引用的列时,:new
将采用什么值?
我正在尝试调试一个存储过程,该存储过程会在更新时触发触发器,该触发器使用接受:new
字段且DATE
值的函数。但是,我正在运行的更新不会更新引用的列。
触发器是否会使用存储在运行更新的表中的值?或者它会从其他地方拿走它?
答案 0 :(得分:5)
如果在update语句中省略了该列,则:NEW.column
值与:OLD.column
值相同。这是在运行更新语句之前存储在表中的值
答案 1 :(得分:5)
documentation is not entirely clear关于此问题,但:NEW
和:OLD
表示当前行的版本。
因此,:NEW.col23
表示新版本行中该列的值。如果事务未更改该列的值,则它将与:OLD.col23
相同。实际上,我们可以使用它在我们的触发器中编写测试代码,以查看更新是否更改了列中的值:
if :NEW.col23 = :OLD.col23 then
-- value not changed