加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle触发器中NEW和old的说明

发布时间:2020-12-12 14:22:41 所属栏目:百科 来源:网络整理
导读:Oracle触发器 创建触发器的一般语法是: CREATE [ORREPLACE] TRIGGER trigger_name {BEFORE | AFTER} { INSERT | DELETE | UPDATE [OFcolumn[,column…] ]} [OR{INSERT|DELETE|UPDATE[OFcolumn[,column…] ]}...] ON [schema.] table_name | [schema.] view_n

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读