最近用行行级触发器写了一个小的Demo,就是employee表中有数据更新或是插入新的数据的时候只要不是对于empid=100的员工做操作,就将操作记录的salary=200001,并且将这条记录插入到另外一个表employeecopy中。
create or replace trigger tri ---trigger tri
before update or insert on employee
referencing old as old_value
new as new_value
for each row
when (new_value.empid<>100)
begin
:new_value.salary:=20001; ---将插入的的salary更改成20001
--update employee set salary=2001;
--:old_value.salary:=2001;
insert into employeecopy(EMPID,EMPNAME,SALARY,CID)
values(:new_value.EMPID,:new_value.EMPNAME,:new_value.SALARY,:new_value.CID);
end;
/
这里有几个小的知识点的分享:
1.For each row的意义是:在一次操作表的语句中,每操作成功一行就会触发一次;不写的话,表示是表级触发器,则无论操作多少行,都只触发一次;
2.before 就是在insert或update之前执行触发器
after 就是在insert或update之后执行触发器
3.NEW 和:OLD使用方法和意义,new 只出现在insert和update时,old只出现在update和delete时。在insert 时new表示新插入的行数据,update时new表示要替换的新数据、old表示要被更改的原来的数据行,delete时old表示要被删除的数据。
4.begin前面出现的new,old不加冒号,begin和end之间出现的new和old都要在前面加上":"。
Oracle触发器使用
猜你喜欢
转载自yangtaohong.iteye.com/blog/1972272
今日推荐
周排行