Oracle触发器 - 有什么价值:当没有任何东西通过时,新的有什

时间:2013-07-26 08:24:18

标签: sql oracle triggers

在问题中 - 当更新完全省略触发器中引用的列时,:new将采用什么值?

我正在尝试调试一个存储过程,该存储过程会在更新时触发触发器,该触发器使用接受:new字段且DATE值的函数。但是,我正在运行的更新不会更新引用的列。

触发器是否会使用存储在运行更新的表中的值?或者它会从其他地方拿走它?

2 个答案:

答案 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