zoukankan      html  css  js  c++  java
  • 【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


  • 相关阅读:
    Java中的subList方法
    某同学工作之后的感悟
    存放80000000学生成绩的集合,怎么统计平均分性能高
    为了金秋那沉甸甸的麦穗,我绝不辜负春天
    subList?? subString???
    "爸妈没多大本事"……
    中秋节支付宝口令红包解析
    算法>动态规划(一) 小强斋
    数据结构>优先队列(堆) 小强斋
    算法>贪心算法 小强斋
  • 原文地址:https://www.cnblogs.com/NextAction/p/7366597.html
Copyright © 2011-2022 走看看