Oracle触发器中NEW和old的说明

Oracle触发器


创建触发器的一般语法是:

 

CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE 
| AFTER }
{
INSERT | DELETE | UPDATE [OF column [, column …]]}
[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]
ON [schema.]table_name | [schema.]view_name 
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW ]
[WHEN condition]
PL
/SQL_BLOCK | CALL procedure_name;


REFERENCING OLD 和 REFERENCING NEW 的含义不同,具体取决于触发器是行级还是语句级触发器。对于行级触发器,REFERENCING OLD 子句允许引用更新或删除之前行中的值,REFERENCING NEW 子句允许引用已插入或更新的值。在 BEFORE 和 AFTER 触发器中可以引用 OLD 和 NEW 行。REFERENCING NEW 子句允许在插入或更新操作发生之前在 BEFORE 触发器中修改新行


其中,new是新插入的数据,old是原来的数据

insert只会有new,代表着要插入的新记录

delete只会有old,代表着要删除的记录

update由于执行的是先删除旧的记录,再插入新的记录,因此new和old都会有,且含义与上面的相同,update触发器,可根据具体需求选择记录旧记录还是新记录。


在insert时new表示新插入的行数据,update时new表示要替换的新数据、old表示要被更改的原来的数据行,delete时old表示要被删除的数据。


实例:

create or replace trigger trigger_update_hipsnorg
   after insert
   on hi_psnjob
   for each row
begin  
   update hi_psnorg set begindate = :new.begindate
   where pk_psnorg = :new.pk_psnorg;
end;


参考文献:

1http://blog.csdn.net/indexman/article/details/8023740/

2http://shuimomo.blog.51cto.com/1141396/482701

3http://guocc.iteye.com/blog/2225063



猜你喜欢

转载自blog.csdn.net/leijie0322/article/details/78225704