摘要:Oracle數(shù)據(jù)庫是目前世界上使用最為廣泛的數(shù)據(jù)庫管理系統(tǒng),而觸發(fā)器作為一種特殊類型的存儲過程,在維護數(shù)據(jù)庫安全性、完整性等方面有著重要作用。以SYSTEM模式中的emp和dept數(shù)據(jù)表為例,闡述了觸發(fā)器的概念及具體應用,以及其在數(shù)據(jù)庫開發(fā)中強大的功能和特點。
關鍵詞:Oracle;觸發(fā)器;SYSTEM模式;數(shù)據(jù)庫應用
DOIDOI:10.11907/rjdk.151136
中圖分類號:TP392
文獻標識碼:A 文章編號:16727800(2015)006015102
基金項目基金項目:廣東科技學院院級重點項目(GKY-2013KYLX-005)
作者簡介作者簡介:彭嬌(1982-),女,河北石家莊人,碩士,廣東科技學院計算機系講師,研究方向為管理科學與工程。
0 引言
觸發(fā)器在Oracle數(shù)據(jù)庫開發(fā)中作用強大,可以方便地基于一個表的修改,自動更新其它相關表的記錄,以保證數(shù)據(jù)的完整性和一致性。觸發(fā)器是建立在Oracle數(shù)據(jù)表上的一種特殊的存儲過程,它定義了一些與數(shù)據(jù)庫相關事件(INSERT、UPDATE、CREATE等)發(fā)生時應執(zhí)行的“功能代碼塊”,通常用于管理復雜的完整性約束或監(jiān)控對表的修改,或通知其它程序,甚至可以實現(xiàn)對數(shù)據(jù)的審計功能。與一般存儲過程不同,觸發(fā)器不能直接調(diào)用,而是由事件啟動運行的,當事件發(fā)生或出現(xiàn)指定操作時,觸發(fā)器會自動激活,進行設定的數(shù)據(jù)處理。
1 觸發(fā)器組成及分類
觸發(fā)器由觸發(fā)事件、觸發(fā)時機、觸發(fā)操作、觸發(fā)對象及觸發(fā)頻率等幾部分組成[1]。
觸發(fā)事件,是引起觸發(fā)器被觸發(fā)的事件。例如,執(zhí)行DML語句、DDL語句、數(shù)據(jù)庫系統(tǒng)事件(如系統(tǒng)啟動或退出、產(chǎn)生異常錯誤等)和用戶事件(如登錄或退出數(shù)據(jù)庫操作),這些操作都可以引起觸發(fā)器的運行。
觸發(fā)時機:表示在觸發(fā)事件發(fā)生之前還是之后執(zhí)行觸發(fā)。關鍵字為BEFORE、AFTER或INSTEAD OF。BEFORE表示在執(zhí)行DML等操作之前觸發(fā);AFTER表示在DML等操作之后發(fā)生;INSTEAD OF表示觸發(fā)器是替代觸發(fā)器。
觸發(fā)操作:觸發(fā)器被觸發(fā)后執(zhí)行的“程序代碼塊”。
觸發(fā)對象:包括表、視圖、模式、數(shù)據(jù)庫。只有在這些對象上發(fā)生了符合觸發(fā)條件的觸發(fā)事件,才會執(zhí)行觸發(fā)操作。
觸發(fā)頻率:指觸發(fā)器內(nèi)定義的動作被執(zhí)行的次數(shù),即語句級觸發(fā)器或行級觸發(fā)器。
根據(jù)觸發(fā)事件和觸發(fā)器的執(zhí)行情況,可以將Oracle所支持的觸發(fā)器分為5種類型:語句級觸發(fā)器、行級觸發(fā)器、替換觸發(fā)器、用戶事件觸發(fā)器和系統(tǒng)事件觸發(fā)器。
語句級觸發(fā)器:針對一條DML語句而引起的觸發(fā)器執(zhí)行,無論該語句影響了多少行數(shù)據(jù),觸發(fā)器只會執(zhí)行一次。
行級觸發(fā)器:相對于語句級觸發(fā)器而言,行級觸發(fā)器會針對DML操作所影響的每一行數(shù)據(jù)執(zhí)行一次觸發(fā)器。
替換觸發(fā)器:替換觸發(fā)器定義在視圖上,而不是數(shù)據(jù)表上。視圖是由多個基表連接組成的邏輯結構,一般不允許進行DML操作。當編寫替換觸發(fā)器后,對視圖的操作實際上就變成了對構成視圖的各個基表的操作。
用戶和系統(tǒng)事件觸發(fā)器:因DDL操作或用戶登錄、退出或系統(tǒng)事件等操作而引起運行的一種觸發(fā)器。
2 觸發(fā)器編寫應用實例
以Oracle數(shù)據(jù)庫中SYSTEM模式下的emp和dept兩張表為例。emp為員工信息表,dept為部門信息表,具體結構如表1、表2所示。
以emp和dept為基表,滿足以下要求:①創(chuàng)建新表dept_log來監(jiān)控dept表的操作信息及操作日期;②以emp和dept為基表,創(chuàng)建一個檢索員工信息的視圖,對視圖進行insert操作。以上兩點要求,實際上是在emp和dept表中創(chuàng)建行級觸發(fā)器和替換觸發(fā)器的問題。
3 觸發(fā)器編寫注意事項
在Oracle數(shù)據(jù)庫開發(fā)中,觸發(fā)器編寫需注意以下幾點:①觸發(fā)器的定義不允許帶有參數(shù);②一個表上最多有12個觸發(fā)器。但同一時間、同一事件的觸發(fā)器只能有一個,并且各觸發(fā)器之間不能有矛盾;③觸發(fā)器的執(zhí)行部分只能用DML語句(如SELECT、INSERT、DELETE),不能使用DDL語句;④觸發(fā)器中不能包含事務控制語句(如COMMIT、ROLLBACK、SAVEPOINT)。
4 結語
觸發(fā)器技術是保證數(shù)據(jù)完整性、一致性的一種方法,在數(shù)據(jù)庫開發(fā)中具有強大功能。在實際開發(fā)應用中,如能熟練地將觸發(fā)器與數(shù)據(jù)庫視圖、函數(shù)、存儲過程有機結合起來使用,將極大地提高計算機系統(tǒng)的運行效率,達到滿意的效果。
參考文獻:
[1] 楊永健,劉尚毅.ORACLE數(shù)據(jù)庫管理、開發(fā)與實踐[M].北京:人民郵電出版社,2012(12):141150.
[2] 顧云鋒,楊素霞.Oracle數(shù)據(jù)庫中存儲過程開發(fā)研究[J].計算機與現(xiàn)代化,2011(10):138142.
[3] 劉維學,喬麗平.SQL Server數(shù)據(jù)庫DML觸發(fā)器的研究與應用[J].計算機技術與發(fā)展,2013(11):6673.
[4] 楊桂霞.存儲過程及觸發(fā)器在SQL Server數(shù)據(jù)庫開發(fā)中的應用[J].計算機光盤軟件與應用,2012(1):6667.
[5] 石道生,張士軍,孫山.SQL Server數(shù)據(jù)庫觸發(fā)器與存儲過程技術在自定義數(shù)據(jù)表中的應用[J].計算機與現(xiàn)代化,2004(3):22-27.
[6] 程凡,張維勇,王建新. 存儲過程和觸發(fā)器在銀行報表管理系統(tǒng)中的應用[J].合肥工業(yè)大學學報,2004(3):125128.
責任編輯(責任編輯:杜能鋼)