【PL/SQL】触发器示例:记录加薪
首先创建一张表,用于保存薪资变化情况:
--创建加薪记录表 CREATE TABLE scott.raisedsalarylog ( empno NUMBER(10) NOT NULL PRIMARY KEY, --员工编号 raiseddate DATE, --加薪日期 originalsal NUMBER(10,2), --加薪前薪资 raisedsal NUMBER(10,2) --加薪后薪资 );
创建触发器,当emp表中sal发生变化,就把变化记录到raisedsalarylog表中:
--定义触发器 CREATE OR REPLACE TRIGGER SCOTT.RAISESALARYCHANGE --定义AFTER触发器,监测emp表的SAL列的更新 AFTER UPDATE OF SAL ON SCOTT.EMP --定义行级触发器 FOR EACH ROW --声明区 DECLARE V_COUNT INT; --定义记录个数变量 BEGIN --查询更新薪资的员工在raisesalarylog表中是否存在 SELECT COUNT(*) INTO V_COUNT FROM SCOTT.RAISEDSALARYLOG WHERE EMPNO = :OLD.EMPNO; IF V_COUNT = 0 --如果不存在,则插入新的记录 THEN INSERT INTO SCOTT.RAISEDSALARYLOG VALUES (:OLD.EMPNO, SYSDATE, :OLD.SAL, :NEW.SAL); ELSE --如果存在,则更新记录 UPDATE SCOTT.RAISEDSALARYLOG 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;
验证触发器:
SQL> update emp set sal=sal*1.12 where empno=7369; 1 row updated SQL> select * from scott.raisedsalarylog; EMPNO RAISEDDATE ORIGINALSAL RAISEDSAL ----------- ----------- ------------ ------------ 7369 2017/8/15 1 800.00 896.00
The End!
2017-08-15