古詩詞大全網 - 成語查詢 - Oracle數據庫中有關觸發器問題

Oracle數據庫中有關觸發器問題

 觸發器是壹種特殊類型的存儲過程 它不同於存儲過程 觸發器主要是通過事件進行觸發而被執行的 觸發器的觸發事件分可為 類 分別是DML事件 DDL事件和數據庫事件 而存儲過程可以通過存儲過程名字而被直接調用 當對某壹表進行諸如UPDATE INSERT DELETE 這些操作時 SQL Server 就會自動執行觸發器所定義的SQL 語句 從而確保對數據的處理必須符合由這些SQL 語句所定義的規則

 觸發器是特定事件出現的時候 自動執行的代碼塊 類似於存儲過程 但是用戶不能直接調用他們

  觸發器功能

  允許/限制對表的修改

  自動生成派生列 比如自增字段

  強制數據壹致性

  提供審計和日誌記錄

  防止無效的事務處理

  啟用復雜的業務邏輯

 觸發器種類

 觸發器的種類可劃分為 種 數據操縱語言(DML)觸發器 替代(INSTEAD OF)觸發器 數據定義語言(DDL)觸發器 數據庫事件觸發器

 數據操縱語言(DML)觸發器 簡稱DML觸發器 是定義在表上的觸發器 創建在表上 由DML事件引發的觸發器 編寫DML觸發器時的兩點要素是 確定觸發的表 即在其上定義觸發器的表 確定觸發的事件 DML觸發器的觸發事件有INSERT UPDATE和DELETE三種;替代觸發器 簡稱INSTEAD OF觸發器 創建在視圖上 用來替換對視圖進行的刪除 插入和修改操作; 數據定義語言(DDL)觸發器 簡稱DDL觸發器 定義在模式上 觸發事件是數據對象的創建和修改;數據庫事件觸發器 定義在整個數據庫或模式上 觸發事件是數據庫事件

 ORACLE產生數據庫觸發器的語法為

 CREATE [OR REPLACE] TRIGGER 觸發器名

 {BEFORE|AFTER|INSTEAD OF} 觸發事件 [OR 觸發事件 ]

 ON 表名

 WHEN 觸發條件

 [FOR EACH ROW]

 DECLARE

 聲明部分

 BEGIN

 主體部分

 END;

 其中

 觸發器名 觸發器對象的名稱 由於觸發器是數據庫自動執行的 因此該名稱只是壹個名稱 沒有實質的用途 壹個觸發器可由多個不同的數據操縱語言操作觸發 在觸發器中 可用INSERTING DELETING UPDATING謂詞來區別不同的數據操縱語言操作 這些謂詞可以在IF分支條件語句中作為判斷條件來使用

 觸發時間 指明觸發器何時執行 該值可取 觸發的時間有BEFORE和AFTER兩種 分別表示觸發動作發生在DML語句執行之前和語句執行之後 確定觸發級別 有語句級觸發器和行級觸發器兩種 語句級觸發器表示SQL語句只觸發壹次觸發器 行級觸發器表示SQL語句影響的每壹行都要觸發壹次

 Before 表示在數據庫動作之前觸發器執行;在SQL語句的執行過程中 如果存在行級BEFORE觸發器 則SQL語句在對每壹行操作之前 都要先執行壹次行級BEFORE觸發器 然後才對行進行操作 如果存在行級AFTER觸發器 則SQL語句在對每壹行操作之後 都要再執行壹次行級AFTER觸發器

 after 表示在數據庫動作之後出發器執行 如果存在語句級AFTER觸發器 則在SQL語句執行完畢後 要最後執行壹次語句級AFTER觸發器

 觸發事件 指明哪些數據庫動作會觸發此觸發器 指INSERT DELETE或UPDATE事件 事件可以並行出現 中間用OR連接;

 insert 數據庫插入會觸發此觸發器;

 update 數據庫修改會觸發此觸發器;

 delete 數據庫刪除會觸發此觸發器

 表 名 數據庫觸發器所在的表

 for each row 表示觸發器為行級觸發器 省略則為語句級觸發器 對表的每壹行觸發器執行壹次

 觸發器的創建者或具有DROP ANY TIRGGER系統權限的人才能刪除觸發器 刪除觸發器的語法如下

 DROP TIRGGER 觸發器名

 可以通過命令設置觸發器的可用狀態 使其暫時關閉或重新打開 即當觸發器暫時不用時 可以將其置成無效狀態 在使用時重新打開 該命令語法如下

 ALTER TRIGGER 觸發器名 {DISABLE|ENABLE}

 其中 DISABLE表示使觸發器失效 ENABLE表示使觸發器生效

 同存儲過程類似 觸發器可以用SHOW ERRORS 檢查編譯錯誤

 如果有多個觸發器被定義成為相同時間 相同事件觸發 且最後定義的觸發器是有效的 則最後定義的觸發器被觸發 其他觸發器不執行 觸發器體內禁止使用MIT ROLLBACK SAVEPOINT語句 也禁止直接或間接地調用含有上述語句的存儲過程 定義壹個觸發器時要考慮上述多種情況 並根據具體的需要來決定觸發器的種類

  觸發器的作用

 觸發器的主要作用就是其能夠實現由主鍵和外鍵所不能保證的復雜的參照完整性和數據的壹致性 除此之外 觸發器還有其它許多不同的功能

 ( ) 強化約束(Enforce restriction)

 觸發器能夠實現比CHECK 語句更為復雜的約束

 ( ) 跟蹤變化Auditing changes

 觸發器可以偵測數據庫內的操作 從而不允許數據庫中未經許可的指定更新和變化

 ( ) 級聯運行(Cascaded operation)

 觸發器可以偵測數據庫內的操作 並自動地級聯影響整個數據庫的各項內容 例如 某個表上的觸發器中包含有對另外壹個表的數據操作(如刪除 更新 插入)而該操作又導致該表上觸發器被觸發

 ( ) 存儲過程的調用(Stored procedure invocation)

 為了響應數據庫更新觸 發器可以調用壹個或多個存儲過程 甚至可以通過外部過程的調用而在DBMS( 數據庫管理系統)本身之外進行操作

 由此可見 觸發器可以解決高級形式的業務規則或復雜行為限制以及實現定制記錄等壹些方面的問題 例如 觸發器能夠找出某壹表在數據修改前後狀態發生的差異 並根據這種差異執行壹定的處理 此外壹個表的同壹類型(INSERT UPDATE DELETE)的多個觸發器能夠對同壹種數據操作采取多種不同的處理

  總體而言 觸發器性能通常比較低

lishixinzhi/Article/program/Oracle/201311/18340