Oracle触发器使用

最近用行行级触发器写了一个小的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都要在前面加上":"。

猜你喜欢

转载自yangtaohong.iteye.com/blog/1972272
今日推荐