一尘不染

新旧触发码

sql

有人可以解释一下这是什么意思吗?

:new:old在触发代码中。


阅读 147

收藏
2021-03-17

共1个答案

一尘不染

:new:old是伪记录,可让您访问特定列的新值和旧值。如果我有桌子

CREATE TABLE foo (
  foo_id NUMBER PRIMARY KEY,
  bar    VARCHAR2(10),
  baz    VARCHAR2(10)
);

我插入一行

INSERT INTO foo( foo_id, bar, baz ) 
  VALUES( 1, 'Bar 1', 'Baz 1' );

然后在行级之前插入触发器

:new.foo_id will be 1
:new.bar will be 'Bar 1'
:new.baz will be 'Baz 1'

尽管

:old.foo_id will be NULL
:old.bar will be NULL
:old.baz will be NULL

如果您随后更新该行

UPDATE foo
   SET baz = 'Baz 2'
 WHERE foo_id = 1

然后在更新前行级触发器中

:new.foo_id will be 1
:new.bar will be 'Bar 1'
:new.baz will be 'Baz 2'

尽管

:old.foo_id will be 1
:old.bar will be 'Bar 1'
:old.baz will be 'Baz 1'

如果我再删除该行

DELETE FROM foo
 WHERE foo_id = 1

然后在之前删除行级触发器中,

:new.foo_id will be NULL
:new.bar will be NULL
:new.baz will be NULL

尽管

:old.foo_id will be 1
:old.bar will be 'Bar 1'
:old.baz will be 'Baz 2'
2021-03-17