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