首页 > 数据库技术 > 详细

PL/SQL-06

时间:2015-04-30 01:06:22      阅读:291      评论:0      收藏:0      [点我收藏+]

触发器


与包或者子程序不同,触发器不能被显式调用,而是在数据库事件发生时隐式地运行,并且触发器不能接收参数。

触发器语句块被执行称为触发事件,而触发的事件可以是对数据库表的DML操作,比如insert , update ,或者 delete 操作,或者对视图的操作。

oracle 还支持对系统事件的触发,如实例的开关,用户的登录。


-- 创建表

create table scott.raisesalarylog

(

empno number (10) not null primary key ,

raiseddate date ,

originalsal number (10,2) ,

raisedsal number (10,2)

) ;


--定义触发器

create or replace trigger scott.raisesalarychange 

 --定义after 触发,监测emp表的sal列的更新 

 after update of sal on scott.emp 

 --定义行级别触发器

 for each row 

 --声明区 

 declare

 v_reccount int ;

 begin

 select count(*) into v_reccount from scott.raisesalarylog where empno = :OLD.empno ;

 if v_reccount = 0 

 then insert into scott.raisesalarylog values ( :OLD.empno , SYSDATE , :OLD.SAL ,  :NEW.sal) ;

 else update scott.raisesalarylog set raiseddate = sysdate , originalsal = :OLD.sal , raisedsal = :NEW.sal where empno = :OLD.empno ;

 end if ;

 exception when others 

 then dbms_output.put_line (SQLERRM);

 end ;


执行语句

update scott.emp set sal = sal * 1.2 where empno = 7369 ;


然后执行查询 


select * from scott.raisesalarylog ;


PL/SQL-06

原文:http://wyhstar460.blog.51cto.com/2972581/1640530

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!