Oracle触发器中NEW和old的说明

前端之家收集整理的这篇文章主要介绍了Oracle触发器中NEW和old的说明前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Oracle触发器


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

CREATE[ORREPLACE]TRIGGERtrigger_name
{BEFORE
|AFTER}
{
INSERT|DELETE|UPDATE[OFcolumn[,column…]]}
[OR{INSERT|DELETE|UPDATE[OFcolumn[,column…]]}...]
ON[schema.]table_name|[schema.]view_name
[REFERENCING{OLD[AS]old|NEW[AS]new|PARENTasparent}]
[FOREACHROW]
[WHENcondition]
PL
/sql_BLOCK|CALLprocedure_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

猜你在找的Oracle相关文章