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