新旧触发码

use*_*580 6 sql triggers oracle10g

有人可以解释一下是什么意思:

:new:old在触发器代码中.

Jus*_*ave 26

:new并且:old是伪记录,允许您访问特定列的新旧值.如果我有一张桌子

CREATE TABLE foo (
  foo_id NUMBER PRIMARY KEY,
  bar    VARCHAR2(10),
  baz    VARCHAR2(10)
);
Run Code Online (Sandbox Code Playgroud)

我插入一行

INSERT INTO foo( foo_id, bar, baz ) 
  VALUES( 1, 'Bar 1', 'Baz 1' );
Run Code Online (Sandbox Code Playgroud)

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

:new.foo_id will be 1
:new.bar will be 'Bar 1'
:new.baz will be 'Baz 1'
Run Code Online (Sandbox Code Playgroud)

:old.foo_id will be NULL
:old.bar will be NULL
:old.baz will be NULL
Run Code Online (Sandbox Code Playgroud)

如果您然后更新该行

UPDATE foo
   SET baz = 'Baz 2'
 WHERE foo_id = 1
Run Code Online (Sandbox Code Playgroud)

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

:new.foo_id will be 1
:new.bar will be 'Bar 1'
:new.baz will be 'Baz 2'
Run Code Online (Sandbox Code Playgroud)

:old.foo_id will be 1
:old.bar will be 'Bar 1'
:old.baz will be 'Baz 1'
Run Code Online (Sandbox Code Playgroud)

如果我然后删除该行

DELETE FROM foo
 WHERE foo_id = 1
Run Code Online (Sandbox Code Playgroud)

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

:new.foo_id will be NULL
:new.bar will be NULL
:new.baz will be NULL
Run Code Online (Sandbox Code Playgroud)

:old.foo_id will be 1
:old.bar will be 'Bar 1'
:old.baz will be 'Baz 2'
Run Code Online (Sandbox Code Playgroud)