当前位置:Gxlcms > 数据库问题 > PL/SQL-06

PL/SQL-06

时间:2021-07-01 10:21:17 帮助过:18人阅读

触发器


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

触发器语句块被执行称为触发事件,而触发的事件可以是对数据库表的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

标签:数据库表   replace   primary   oracle   number   

人气教程排行