Oracle數據庫的觸發器


一:概念

  是oracle在發生某些事件時,可以自動觸發並調用的plsql程序,可以定義在事件上,由事件自動觸發。

二:分類

  1)系統觸發器:由系統事件觸發的plsql程序,比如登陸oracle數據庫,登出oracle。

  2)DML觸發器:由DML語句觸發的plsql程序,比如增刪改。

三:DML觸發器

  -->語句觸發器

    a.如果執行完一條DML語句后,希望對整張表的數據進行預算,使用語句觸發器,這種觸發器是在DML執行前/后自動觸發的。

    b.語法

      create [or replace] trigger 觸發器名   

      before | after insert | update | delete on 表

      declare

        --變量聲明區

      begin

        --處理業務

      end;

      /  

      注:觸發器自動調用,在DML語句執行之前或之后。

    c.練習:在進行任何增刪改操作后,計算出員工數,員工薪資合計,員工平均工資。

      create or replace trigger emp_tri

      after insert or update or delete on emp

      declare

        count_emp number;

        sal_total number;

          sal_avg number;

      begin

        select count(*) into count_emp from emp;

        select sum(sal) into sal_total from emp;

        select avg(sal) into sal_avg from emp;

        dbms_output.put_line(count_emp||'  '||sal_total||'  '||sal_avg);

      end;

      /

    update emp set sal = 1000 where empno=7698;--當我們執行此sql語句時,觸發器就會觸發,輸出相應的值。

  -->行級觸發器

    a.如果在執行DML時,希望對當前操作的數據進行處理,那么可以使用行級觸發器。行級觸發器也是在執行DML之前/后自動觸發的,在行級觸發器中可以使用行變量引用到DML所操作的數據,這個行變量是內置的,可以直接使用。

    b.行變量

      --  :new  表示引用的是新增后的行數據

      --  :old  表示引用的是修改/刪除前的行數據

      --  規則

          insert語句只有:new,表示插入后的數據。

          delete語句只有:old,表示刪除前的舊的數據。

          update語句二者都有,new表示修改后的數據,old表示修改前的數據。

    c.語法

      create or replace trigger 觸發器名

      before | after insert | update | delete on 表名  

      for each row

      declare

        --聲明變量

      begin    

        --業務邏輯

      end;

      /

    d.練習:刪除dept表數據之前,將刪除記錄存入備份表。

    create or replace trigger dept_trig

    before delete on dept

    for each row

    declare

    begin  

      insert into dept_bak values(:old,deptno,:old.name,:old.loc);

    end;

    /

  注:觸發器不要寫commit。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM