Oracle12C--觸發器(五十二)
知識點的梳理:
- Oracle中的觸發器分為DML觸發器,instead-of(替代)觸發器,DDL觸發器,系統觸發器和資料庫事件觸發器;
-
DML觸發器中分為以下兩類:
- 表級觸發器:所有更新操作只在之前或之後觸發一次;
- 行級觸發器:針對更新的每一行分別進行之前或之後觸發;
- 行級觸發器中可以使用":old"取得更新前的資料,使用":new"取得更新後的資料;
- 複合觸發器是在Oracle11G之後增加的新功能,可以進行4個觸發事件操作;
- 如果要對檢視進行更新操作,則應該使用替代觸發器來完成,在替代觸發器中,可以對檢視中包含的多個數據表進行更新操作;
- 當需要對發生的DDL操作進行觸發時,可以採用DDL觸發器。DDL觸發器可以針對一個使用者或整個資料庫,如果針對資料庫級應該具備管理員許可權;
- 每一個觸發器只能編寫最多32KB的程式碼,當程式複雜時,可通過過程或函式進行功能切割;
-
觸發器簡介
-
觸發器類似於過程和函式;
- 例:當對某一張表執行更新操作(insert,update,delete)時,都可能引發觸發器執行;
- 觸發器依靠事件執行;
- 採用隱式呼叫,不能接收引數
-
觸發器類似於過程和函式;
-
基本語法與分類
- Oracle中的觸發器分類:DML,instead-of(替代),DDL,系統或資料庫事件觸發器
- 所有觸發器都支援的基本建立語法:
CREATE [OR REPLACE] TRIGGER
觸發器名稱 |
語法作用: [INSTEAD OF]:替代觸發器,對於檢視操作所定義的觸發器型別; [INSERT | UPDATE |UPDATE OF
列名稱 [,列名稱,...]|DELETE]:觸發的事件,可以是資料表的增加,修改,刪除,或者部分欄位的更新; [FOLLOWS 觸發器名稱]:配置多個觸發器執行的先後順序; [DISABLE]:觸發器建立之後預設是啟用狀態,通過此選項,可將其定義為禁用狀態; [WHEN 觸發條件]:當滿足指定條件時才執行觸發器操作; [PRAGMA AUTONOMOUS_TRANSACTION;]:自治事務宣告,編寫此語句後會在觸發器中啟動一個子事務處理,並且可以使用COMMIT提交事務; BEGIN:程式主體部分; END:觸發器結束標記; /:完結標記 |
-
觸發器注意事項
- 觸發器不接受任何引數,且只能是在產生了某一個觸發事件之後才會自動呼叫;
- 對於一張資料表的觸發器,最多隻有12個,同一種類型的觸發器,只能定義一次;
- 一個觸發器最大為32KB,所以如果需要編寫的程式碼較多,可以通過過程或函式呼叫來完成;
- 預設情況下,觸發器中不能使用事務處理操作,或採用自治事務進行處理;
- 在一張資料表中,定義過多的觸發器,會造成DML效能下降;
- 觸發器相關許可權
CREATE ANY TRIGGER |
為任意使用者建立觸發器的許可權 |
ALTER ANY TRIGGER |
修改任意觸發器的許可權 |
DROP ANY TRIGGER |
刪除任意觸發器的許可權 |