Oracle第9章觸發(fā)器操作_第1頁
Oracle第9章觸發(fā)器操作_第2頁
Oracle第9章觸發(fā)器操作_第3頁
Oracle第9章觸發(fā)器操作_第4頁
Oracle第9章觸發(fā)器操作_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第9章 觸發(fā)器操作主編:劉志成2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程本章學(xué)習(xí)導(dǎo)航本章學(xué)習(xí)導(dǎo)航本章學(xué)習(xí)導(dǎo)航本章學(xué)習(xí)導(dǎo)航 2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程本章學(xué)習(xí)要點(diǎn)本章學(xué)習(xí)要點(diǎn)(1)觸發(fā)器的)觸發(fā)器的基礎(chǔ)知識(shí)基礎(chǔ)知識(shí)。(2):OLD和和:NEW變量。變量。(3)SQL Developer創(chuàng)建、修改、查看、編譯創(chuàng)建、修改、查看、編譯和刪除觸發(fā)器。和刪除觸發(fā)器。(4)PL/SQL創(chuàng)建、修改、查看、編譯和刪除創(chuàng)建、修改、查看、編譯和刪除觸發(fā)器。觸發(fā)器。(5)觸發(fā)器的)觸發(fā)器的功能及使用功能及使

2、用。(6)eBuy電子商城中的電子商城中的典型觸發(fā)器典型觸發(fā)器 建議課時(shí):建議課時(shí):8課時(shí)課時(shí)2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程9.1 觸發(fā)器概述 觸發(fā)器簡(jiǎn)介觸發(fā)器簡(jiǎn)介觸發(fā)器是一種特殊的存儲(chǔ)過程,它與數(shù)據(jù)表緊密聯(lián)系,用于保護(hù)表中的觸發(fā)器是一種特殊的存儲(chǔ)過程,它與數(shù)據(jù)表緊密聯(lián)系,用于保護(hù)表中的數(shù)據(jù),當(dāng)一個(gè)定義了特定類型觸發(fā)器的基表執(zhí)行插入、修改或刪除表中數(shù)據(jù),當(dāng)一個(gè)定義了特定類型觸發(fā)器的基表執(zhí)行插入、修改或刪除表中數(shù)據(jù)的操作時(shí),將自動(dòng)觸發(fā)觸發(fā)器中定義的操作,以實(shí)現(xiàn)數(shù)據(jù)的一致性數(shù)據(jù)的操作時(shí),將自動(dòng)觸發(fā)觸發(fā)器中定義的操作,以實(shí)現(xiàn)數(shù)據(jù)的一致性和完

3、整性。和完整性。觸發(fā)器擁有比數(shù)據(jù)庫本身標(biāo)準(zhǔn)的功能更精細(xì)和更復(fù)雜的數(shù)據(jù)控制能力。觸發(fā)器擁有比數(shù)據(jù)庫本身標(biāo)準(zhǔn)的功能更精細(xì)和更復(fù)雜的數(shù)據(jù)控制能力。 觸發(fā)器具有以下的作用:觸發(fā)器具有以下的作用:(1)在)在安全性安全性方面,觸發(fā)器可以基于數(shù)據(jù)庫的值使用戶具有操作數(shù)據(jù)方面,觸發(fā)器可以基于數(shù)據(jù)庫的值使用戶具有操作數(shù)據(jù)庫的某種權(quán)利。庫的某種權(quán)利。 (2)在)在審計(jì)審計(jì)方面,觸發(fā)器可以跟蹤用戶對(duì)數(shù)據(jù)庫的操作。方面,觸發(fā)器可以跟蹤用戶對(duì)數(shù)據(jù)庫的操作。 (3)實(shí)現(xiàn))實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)完整性規(guī)則復(fù)雜的數(shù)據(jù)完整性規(guī)則。 (4)實(shí)現(xiàn)復(fù)雜的非標(biāo)準(zhǔn)的數(shù)據(jù)庫相關(guān)完整性規(guī)則。觸發(fā)器可以對(duì)數(shù)據(jù))實(shí)現(xiàn)復(fù)雜的非標(biāo)準(zhǔn)的數(shù)據(jù)庫相關(guān)完整性規(guī)則

4、。觸發(fā)器可以對(duì)數(shù)據(jù)庫中相關(guān)的表進(jìn)行庫中相關(guān)的表進(jìn)行連環(huán)更新連環(huán)更新。 (5)同步實(shí)時(shí)同步實(shí)時(shí)地復(fù)制表中的數(shù)據(jù)。地復(fù)制表中的數(shù)據(jù)。(6)自動(dòng)計(jì)算數(shù)據(jù)值自動(dòng)計(jì)算數(shù)據(jù)值,如果數(shù)據(jù)的值達(dá)到了一定的要求,則進(jìn)行特定,如果數(shù)據(jù)的值達(dá)到了一定的要求,則進(jìn)行特定的處理。例如,如果商品的數(shù)量低于的處理。例如,如果商品的數(shù)量低于5,則立即給管理人員發(fā)送庫存報(bào),則立即給管理人員發(fā)送庫存報(bào)警信息。警信息。2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程9.1 觸發(fā)器概述 觸發(fā)器類型觸發(fā)器類型1觸發(fā)器的功能觸發(fā)器的功能(1)DML觸發(fā)器觸發(fā)器當(dāng)對(duì)表進(jìn)行當(dāng)對(duì)表進(jìn)行DML操作時(shí)觸發(fā)

5、,可以在操作時(shí)觸發(fā),可以在DML操作前或操作后觸發(fā)。操作前或操作后觸發(fā)。(2)替代觸發(fā)器)替代觸發(fā)器是是Oracle用來替換所使用的實(shí)際語句而執(zhí)行的觸發(fā)器。用來替換所使用的實(shí)際語句而執(zhí)行的觸發(fā)器。(3)系統(tǒng)觸發(fā)器)系統(tǒng)觸發(fā)器在在Oracle數(shù)據(jù)庫系統(tǒng)的事件(數(shù)據(jù)庫系統(tǒng)的事件(Oracle系統(tǒng)的啟動(dòng)與關(guān)閉等)中進(jìn)行觸發(fā)。系統(tǒng)的啟動(dòng)與關(guān)閉等)中進(jìn)行觸發(fā)。(4)用戶事件觸發(fā)器)用戶事件觸發(fā)器指與數(shù)據(jù)庫定義語句或用戶的登錄指與數(shù)據(jù)庫定義語句或用戶的登錄/注銷等事件相關(guān)的觸發(fā)器。注銷等事件相關(guān)的觸發(fā)器。2觸發(fā)事件觸發(fā)事件按觸發(fā)事件的不同,觸發(fā)器可以分為插入型(按觸發(fā)事件的不同,觸發(fā)器可以分為插入型(IN

6、SERT)、更新型)、更新型(UPDATE)和刪除型()和刪除型(DELETE)觸發(fā)器。)觸發(fā)器。對(duì)于插入型觸發(fā)器,當(dāng)觸發(fā)器所在的表發(fā)生插入操作時(shí),觸發(fā)器將自動(dòng)對(duì)于插入型觸發(fā)器,當(dāng)觸發(fā)器所在的表發(fā)生插入操作時(shí),觸發(fā)器將自動(dòng)觸發(fā)執(zhí)行。對(duì)于更新型觸發(fā)器,當(dāng)觸發(fā)器所在的表發(fā)生更新操作時(shí),觸觸發(fā)執(zhí)行。對(duì)于更新型觸發(fā)器,當(dāng)觸發(fā)器所在的表發(fā)生更新操作時(shí),觸發(fā)器將自動(dòng)觸發(fā)執(zhí)行。同樣,對(duì)于刪除型觸發(fā)器,當(dāng)觸發(fā)器所在的表發(fā)發(fā)器將自動(dòng)觸發(fā)執(zhí)行。同樣,對(duì)于刪除型觸發(fā)器,當(dāng)觸發(fā)器所在的表發(fā)生刪除操作時(shí),觸發(fā)器也將自動(dòng)觸發(fā)執(zhí)行。生刪除操作時(shí),觸發(fā)器也將自動(dòng)觸發(fā)執(zhí)行。 2022-2-20OracleOracle數(shù)據(jù)庫管理

7、與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程9.1 觸發(fā)器概述 觸發(fā)器類型觸發(fā)器類型3觸發(fā)時(shí)間觸發(fā)時(shí)間根據(jù)指定的事件和觸發(fā)器執(zhí)行的先后次序,觸發(fā)器可以分為根據(jù)指定的事件和觸發(fā)器執(zhí)行的先后次序,觸發(fā)器可以分為BEFORE型型和和AFTER型觸發(fā)器。型觸發(fā)器。如果在指定的事件(如果在指定的事件(INSERT、UPDATE或者或者DELETE)之前執(zhí)行觸發(fā))之前執(zhí)行觸發(fā)器,這類觸發(fā)器稱為器,這類觸發(fā)器稱為BEFORE觸發(fā)器;若在指定的事件之后執(zhí)行觸發(fā)器,觸發(fā)器;若在指定的事件之后執(zhí)行觸發(fā)器,則稱這類觸發(fā)器為則稱這類觸發(fā)器為AFTER觸發(fā)器。觸發(fā)器。4觸發(fā)級(jí)別觸發(fā)級(jí)別根據(jù)觸發(fā)級(jí)別的不同,觸發(fā)器可以分為根據(jù)觸

8、發(fā)級(jí)別的不同,觸發(fā)器可以分為行觸發(fā)器行觸發(fā)器和和語句觸發(fā)器語句觸發(fā)器。對(duì)于行觸發(fā)器,受觸發(fā)事件影響的每一行都將引發(fā)觸發(fā)器的執(zhí)行;而對(duì)對(duì)于行觸發(fā)器,受觸發(fā)事件影響的每一行都將引發(fā)觸發(fā)器的執(zhí)行;而對(duì)于語句觸發(fā)器,觸發(fā)事件只觸發(fā)一次,即使有若干行受觸發(fā)事件的影響,于語句觸發(fā)器,觸發(fā)事件只觸發(fā)一次,即使有若干行受觸發(fā)事件的影響,也只執(zhí)行一次觸發(fā)操作。也只執(zhí)行一次觸發(fā)操作。 2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程9.1 觸發(fā)器概述 :OLD:OLD變量和變量和:NEW:NEW變量變量在在Oracle系統(tǒng)中,每個(gè)觸發(fā)器被系統(tǒng)中,每個(gè)觸發(fā)器被DML操作觸發(fā)

9、時(shí),會(huì)產(chǎn)生兩個(gè)特殊的變操作觸發(fā)時(shí),會(huì)產(chǎn)生兩個(gè)特殊的變量量:OLD和和:NEW,分別代表某數(shù)據(jù)記錄行在修改前和修改后的值。這兩,分別代表某數(shù)據(jù)記錄行在修改前和修改后的值。這兩個(gè)變量都是系統(tǒng)變量,由個(gè)變量都是系統(tǒng)變量,由Oracle系統(tǒng)管理,存儲(chǔ)在內(nèi)存中,不允許用戶系統(tǒng)管理,存儲(chǔ)在內(nèi)存中,不允許用戶直接對(duì)其進(jìn)行修改。直接對(duì)其進(jìn)行修改。:OLD和和:NEW變量的結(jié)構(gòu)總是與執(zhí)行變量的結(jié)構(gòu)總是與執(zhí)行DML操作的表操作的表的結(jié)構(gòu)相同的結(jié)構(gòu)相同。當(dāng)觸發(fā)器工作完成以后,這兩個(gè)變量也隨之消失。這兩個(gè)。當(dāng)觸發(fā)器工作完成以后,這兩個(gè)變量也隨之消失。這兩個(gè)變量的值是變量的值是只讀只讀的,即用戶不能向這兩個(gè)變量寫入內(nèi)容

10、,但可以引用變的,即用戶不能向這兩個(gè)變量寫入內(nèi)容,但可以引用變量中的數(shù)據(jù)。量中的數(shù)據(jù)。:OLD變量變量用于存儲(chǔ)用于存儲(chǔ)DELETE和和UPDATE操作操作所影響的行的副本。當(dāng)執(zhí)行所影響的行的副本。當(dāng)執(zhí)行DELETE或或UPDATE操作時(shí),行從觸發(fā)表中被刪除,并傳輸?shù)讲僮鲿r(shí),行從觸發(fā)表中被刪除,并傳輸?shù)?OLD變量變量中。中。:NEW變量用于存儲(chǔ)變量用于存儲(chǔ)INSERT和和UPDATE操作所影響的行的副本。當(dāng)執(zhí)行操作所影響的行的副本。當(dāng)執(zhí)行INSERT或或UPDATE操作時(shí),新行被同時(shí)添加到操作時(shí),新行被同時(shí)添加到:NEW變量和觸發(fā)表變量和觸發(fā)表中,中,:NEW變量中的行即為觸發(fā)表中新行的副本。

11、變量中的行即為觸發(fā)表中新行的副本。 2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程9.1 觸發(fā)器概述 :OLD:OLD變量和變量和:NEW:NEW變量變量2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程課堂案例1使用SQL Developer管理觸發(fā)器 學(xué)習(xí)使用SQL Developer創(chuàng)建觸發(fā)器的方法和基本步驟,掌握觸發(fā)器的執(zhí)行時(shí)機(jī) 。案例學(xué)習(xí)目標(biāo)案例學(xué)習(xí)目標(biāo) SQL Developer創(chuàng)建觸發(fā)器、驗(yàn)證觸發(fā)器的作用 。案例知識(shí)要點(diǎn)案例知識(shí)要點(diǎn) 2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教

12、程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程課堂案例1使用SQL Developer管理觸發(fā)器案例完成步驟案例完成步驟- -創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器 1創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器 (1)在SQL Developer中右擊Triggers選項(xiàng),從快捷菜單中選擇“New Trigger”項(xiàng),將開始創(chuàng)建觸發(fā)器。(2)在打開的“Create Trigger”對(duì)話框中,輸入TR_ADDUSER作為新建觸發(fā)器的名稱;選擇觸發(fā)器類型(Trigger Type)為TABLE,并選擇觸發(fā)表為客戶表USERS。然后選擇觸發(fā)器類別信息為After、語句級(jí)別(Statement Level)和插入型(Insert);其余采用默認(rèn)值 。教教師師演

13、演示示講講解解2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程課堂案例1使用SQL Developer管理觸發(fā)器案例完成步驟案例完成步驟- -創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器 (3)觸發(fā)器設(shè)置完成后,單擊)觸發(fā)器設(shè)置完成后,單擊“確定確定”按鈕,在按鈕,在PL/SQL編輯窗口中補(bǔ)充創(chuàng)建觸發(fā)器的編輯窗口中補(bǔ)充創(chuàng)建觸發(fā)器的PL/SQL代碼代碼 。(4)觸發(fā)器編譯成功后,在)觸發(fā)器編譯成功后,在PL/SQL編輯窗口中輸入以編輯窗口中輸入以下下PL/SQL代碼:代碼:INSERT INTO UsersVALUES(00,trigger,普通普通, trigger );(5

14、)按)按F9鍵執(zhí)行該鍵執(zhí)行該P(yáng)L/SQL語句,激發(fā)觸發(fā)器的執(zhí)行語句,激發(fā)觸發(fā)器的執(zhí)行 教教師師演演示示講講解解2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程課堂案例1使用SQL Developer管理觸發(fā)器案例完成步驟案例完成步驟- -查看觸發(fā)器查看觸發(fā)器 在在SQL Developer的左邊的樹型結(jié)構(gòu)中,展開的左邊的樹型結(jié)構(gòu)中,展開Triggers節(jié)點(diǎn)后選擇需要查看的觸發(fā)器節(jié)點(diǎn)后選擇需要查看的觸發(fā)器tr_AddUser,將在右邊欄,將在右邊欄內(nèi)顯示內(nèi)顯示tr_AddUser觸發(fā)器的信息,如觸發(fā)器的定義語句觸發(fā)器的信息,如觸發(fā)器的定義語句和詳細(xì)描述等

15、和詳細(xì)描述等 教教師師演演示示講講解解2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程課堂案例1使用SQL Developer管理觸發(fā)器案例完成步驟案例完成步驟- -修改觸發(fā)器修改觸發(fā)器 (1)在SQL Developer中,右鍵單擊Triggers選項(xiàng)中的觸發(fā)器tr_AddUser,從快捷菜單中選擇“Edit”項(xiàng) 。(2)在打開的觸發(fā)器編輯窗口中,修改觸發(fā)器的定義PL/SQL語句 教教師師演演示示講講解解2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程課堂案例1使用SQL Developer管理觸發(fā)器案例完成

16、步驟案例完成步驟- -刪除觸發(fā)器刪除觸發(fā)器 (1)在)在SQL Developer中,右擊中,右擊Triggers選項(xiàng)中的待刪選項(xiàng)中的待刪除觸發(fā)器除觸發(fā)器tr_AddUser,從快捷菜單中選擇,從快捷菜單中選擇“Drop Trigger”項(xiàng)。項(xiàng)。(2)在打開的)在打開的“Drop Trigger”對(duì)話框中,在對(duì)話框中,在Prompts(提示)選項(xiàng)卡內(nèi)顯示了待刪除觸發(fā)器的所有者和名稱,(提示)選項(xiàng)卡內(nèi)顯示了待刪除觸發(fā)器的所有者和名稱,并提示用戶是否需要?jiǎng)h除該觸發(fā)器。并提示用戶是否需要?jiǎng)h除該觸發(fā)器。(3)單擊)單擊“應(yīng)用應(yīng)用”按鈕,將打開按鈕,將打開Confirmation對(duì)話框,對(duì)話框,以提示用

17、戶該觸發(fā)器已經(jīng)被刪除。以提示用戶該觸發(fā)器已經(jīng)被刪除。 教教師師演演示示講講解解2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程課堂案例2使用PL/SQL管理觸發(fā)器 學(xué)習(xí)使用PL/SQL語句中的CREATE TRIGGER語句的用法 。案例學(xué)習(xí)目標(biāo)案例學(xué)習(xí)目標(biāo) CREATE TRIGGER創(chuàng)建觸發(fā)器、驗(yàn)證觸發(fā)器的作用 。案例知識(shí)要點(diǎn)案例知識(shí)要點(diǎn) 2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程課堂案例2使用PL/SQL管理觸發(fā)器案例完成步驟案例完成步驟- -創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器 1創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器 【例2-1

18、】為用戶方案SCOTT的客戶表CUSTOMERS創(chuàng)建插入型觸發(fā)器,當(dāng)添加新客戶信息時(shí),顯示“歡迎新會(huì)員注冊(cè)!”。INSERT INTO SCOTT.Customers VALUES(C2002,trigger,觸發(fā)器,女,to_date(1999-04-14,yyyy-mm-dd)湖南長(zhǎng)沙市,4100010731-8888888,123456,6666,你出生在哪里,湖南長(zhǎng)沙,普通); 教教師師演演示示講講解解2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程課堂案例2使用PL/SQL管理

19、觸發(fā)器案例完成步驟案例完成步驟- -創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器 【例2-2】為用戶方案SCOTT的客戶表CUSTOMERS創(chuàng)建刪除型觸發(fā)器,當(dāng)刪除會(huì)員信息時(shí),顯示“用戶已被刪除!”的信息。CREATE OR REPLACE TRIGGER tr_DelCUSTBEFORE DELETEON SCOTT.CUSTOMERSFOR EACH ROWBEGIN DBMS_OUTPUT.PUT_LINE(待刪除的記錄為:); DBMS_OUTPUT.PUT_LINE(:OLD.c_NAME|用戶已被刪除!);END tr_DelCUST;DELETE CUSTOMERS WHERE c_D = C2002;

20、教教師師演演示示講講解解2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程課堂案例2使用PL/SQL管理觸發(fā)器案例完成步驟案例完成步驟- -創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器 【例2-3】實(shí)現(xiàn)eBuy電子商城系統(tǒng)的日志操作功能(語句級(jí)觸發(fā)器)。(1)創(chuàng)建語句級(jí)觸發(fā)器的測(cè)試表)創(chuàng)建語句級(jí)觸發(fā)器的測(cè)試表(該語句應(yīng)該在創(chuàng)建觸發(fā)器的語句之前運(yùn)行)CREATE TABLE SYSLOG(WHO VARCHAR2(30),OPER_DATE DATE);該表用來保存對(duì)eBuy系統(tǒng)進(jìn)行操作的日志。(2)創(chuàng)建語句級(jí)觸發(fā)器)創(chuàng)建語句級(jí)觸發(fā)器CREATE OR REPLACE TRIGG

21、ER tr_DeleteUserAFTER DELETEON UsersBEGIN INSERT INTO SYSLOG(WHO,OPER_DATE) VALUES(USER,SYSDATE);END;教教師師演演示示講講解解2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程課堂案例2使用PL/SQL管理觸發(fā)器案例完成步驟案例完成步驟- -創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器 該觸發(fā)器用來實(shí)現(xiàn)在該觸發(fā)器用來實(shí)現(xiàn)在Users表中刪除一條記錄時(shí),在表中刪除一條記錄時(shí),在SYSLOG表中添加一條包含當(dāng)前操作用戶(表中添加一條包含當(dāng)前操作用戶(USER表示當(dāng)前表示當(dāng)前用戶)和當(dāng)

22、前操作日期(用戶)和當(dāng)前操作日期(SYSDATE表示當(dāng)前日期)的記錄。表示當(dāng)前日期)的記錄。(3)測(cè)試觸發(fā)器)測(cè)試觸發(fā)器tr_DeleteUser通過刪除通過刪除Users表中的一條記錄(用戶名稱為表中的一條記錄(用戶名稱為“存儲(chǔ)過程存儲(chǔ)過程”)來測(cè)試觸發(fā)器的功能。來測(cè)試觸發(fā)器的功能。DELETE FROM Users WHERE u_Name=存儲(chǔ)過程存儲(chǔ)過程;SELECT * FROM Syslog;教教師師演演示示講講解解2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程課堂案例2使用PL/SQL管理觸發(fā)器案例完成步驟案例完成步驟- -創(chuàng)建觸發(fā)器創(chuàng)

23、建觸發(fā)器 【例例2-4】通過臨時(shí)表將通過臨時(shí)表將Users表中刪除的記錄進(jìn)行臨時(shí)保存(行級(jí)觸發(fā)器)。表中刪除的記錄進(jìn)行臨時(shí)保存(行級(jí)觸發(fā)器)。(1)創(chuàng)建行級(jí)觸發(fā)器的測(cè)試表)創(chuàng)建行級(jí)觸發(fā)器的測(cè)試表CREATE TABLE userdel ASSELECT * FROM UsersWHERE u_Name=amy;(2)創(chuàng)建行級(jí)觸發(fā)器)創(chuàng)建行級(jí)觸發(fā)器CREATE OR REPLACE TRIGGER tr_DeleteUser2AFTER DELETEON UsersFOR EACH ROWBEGIN INSERT INTO userdelALUES(:OLD.u_ID,:OLD.u_Name,:

24、OLD.u_Type,:OLD.u_Password);END;(3)測(cè)試觸發(fā)器)測(cè)試觸發(fā)器tr_DeleteUser和和tr_DeleteUser2DELETE FROM Users WHERE u_Name=amy;SELECT * FROM userdel;SELECT * FROM syslog;教教師師演演示示講講解解2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程課堂案例2使用PL/SQL管理觸發(fā)器案例完成步驟案例完成步驟- -查看觸發(fā)器查看觸發(fā)器 【例例2-5】查看用戶方案查看用戶方案SCOTT中所有觸發(fā)器的名稱、觸發(fā)中所有觸發(fā)器的名稱、

25、觸發(fā)類型、觸發(fā)事件、所有者和觸發(fā)表等信息。類型、觸發(fā)事件、所有者和觸發(fā)表等信息。SELECTTRIGGER_NAME 觸發(fā)器名觸發(fā)器名, TRIGGER_TYPE 觸發(fā)類型觸發(fā)類型, TRIGGERING_EVENT 觸發(fā)事件觸發(fā)事件, TABLE_NAME 觸發(fā)表觸發(fā)表FROMUSER_TRIGGERS;教教師師演演示示講講解解2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程課堂案例2使用PL/SQL管理觸發(fā)器案例完成步驟案例完成步驟- -修改和刪除觸發(fā)器修改和刪除觸發(fā)器 3修改觸發(fā)器修改觸發(fā)器修改觸發(fā)器和修改視圖類似,雖然修改觸發(fā)器和修改視圖類似,

26、雖然Oracle也提供也提供ALTER TRIGGER命令,但它只用于重新編譯或者驗(yàn)證現(xiàn)有觸發(fā)器。命令,但它只用于重新編譯或者驗(yàn)證現(xiàn)有觸發(fā)器。如果需要修改觸發(fā)器的定義,則仍然使用如果需要修改觸發(fā)器的定義,則仍然使用CREATE OR REPLACE TRIGGER命令。命令。4刪除觸發(fā)器刪除觸發(fā)器Oracle的的PL/SQL語句提供了語句提供了DROP TRIGGER命令來刪除命令來刪除觸發(fā)器,其基本語法格式為:觸發(fā)器,其基本語法格式為:DROP TRIGGER 用戶方案用戶方案.觸發(fā)器名觸發(fā)器名;【例例2-6】刪除用戶方案刪除用戶方案SCOTT的觸發(fā)器的觸發(fā)器tr_ADDCUST。實(shí)現(xiàn)該刪除

27、任務(wù)的實(shí)現(xiàn)該刪除任務(wù)的DROP TRIGGER命令如下:命令如下:DROP TRIGGER SCOTT. tr_ADDCUST;教教師師演演示示講講解解2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程9.3 其他類型觸發(fā)器替代觸發(fā)器替代觸發(fā)器 INSTEAD OF觸發(fā)器主要用來對(duì)另一個(gè)表或者視圖進(jìn)行DML操作。 【例3-1】已經(jīng)創(chuàng)建了查詢商品信息的視圖VW_GOODSINFO,視圖結(jié)構(gòu)包含商品編號(hào)、商品名稱、商品類別和詳細(xì)描述。對(duì)于視圖VWGOODSINFO,考慮使用更新語句,以期更新視圖,達(dá)到更新基表中數(shù)據(jù)的目的。(1)定義視圖)定義視圖CREATE

28、 OR REPLACE VIEW SCOTT.VW_GOODSINFOAS SELECT g_ID, g_NAME, t_NAME,g_PRICE FROM SCOTT.GOODS G JOIN SCOTT.TYPES T ON G.t_ID = T.t_ID;教教師師演演示示講講解解2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程9.3 其他類型觸發(fā)器替代觸發(fā)器替代觸發(fā)器 (2)更新視圖數(shù)據(jù))更新視圖數(shù)據(jù)對(duì)于視圖對(duì)于視圖VWGOODSINFO,考慮使用更新語句,以期更新,考慮使用更新語句,以期更新視圖,達(dá)到更新基表中數(shù)據(jù)的目的。相應(yīng)的視圖,達(dá)到更新基

29、表中數(shù)據(jù)的目的。相應(yīng)的PL/SQL語句如語句如下所示:下所示:UPDATESCOTT.VW_GOODSINFOSET g_NAME = 三星三星SGH-C888,t_NAME = 電腦產(chǎn)品電腦產(chǎn)品WHERE g_ID = 010006;教教師師演演示示講講解解2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程9.3 其他類型觸發(fā)器替代觸發(fā)器替代觸發(fā)器 (3)創(chuàng)建)創(chuàng)建INSTEAD OF觸發(fā)器觸發(fā)器教教師師演演示示講講解解2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程9.3 其他類型觸發(fā)器系統(tǒng)事件觸發(fā)器系統(tǒng)事件

30、觸發(fā)器 系統(tǒng)事件觸發(fā)器是指由數(shù)據(jù)庫系統(tǒng)事件觸發(fā)的數(shù)據(jù)庫觸發(fā)器。系統(tǒng)事件觸發(fā)器是指由數(shù)據(jù)庫系統(tǒng)事件觸發(fā)的數(shù)據(jù)庫觸發(fā)器。數(shù)據(jù)庫系統(tǒng)事件通常包括以下幾種:數(shù)據(jù)庫系統(tǒng)事件通常包括以下幾種:l 數(shù)據(jù)庫的啟動(dòng)(數(shù)據(jù)庫的啟動(dòng)(STARTUP););l 數(shù)據(jù)庫的關(guān)閉(數(shù)據(jù)庫的關(guān)閉(SHUTDOWN););l 數(shù)據(jù)庫服務(wù)器出錯(cuò)(數(shù)據(jù)庫服務(wù)器出錯(cuò)(SERVERERROR)。)?!纠?-2】創(chuàng)建數(shù)據(jù)庫啟動(dòng)后記錄啟動(dòng)時(shí)間的系統(tǒng)事件觸發(fā)器。創(chuàng)建數(shù)據(jù)庫啟動(dòng)后記錄啟動(dòng)時(shí)間的系統(tǒng)事件觸發(fā)器。(1)創(chuàng)建系統(tǒng)事件觸發(fā)器測(cè)試表)創(chuàng)建系統(tǒng)事件觸發(fā)器測(cè)試表CREATE TABLE dblog(op_date timestamp);

31、(2)創(chuàng)建系統(tǒng)事件觸發(fā)器)創(chuàng)建系統(tǒng)事件觸發(fā)器CREATE OR REPLACE TRIGGER tr_StartDBAFTER STARTUPON DATABASEBEGIN INSERT INTO DBLOG VALUES(SYSDATE);END;教教師師演演示示講講解解2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程9.3 其他類型觸發(fā)器用戶事件觸發(fā)器用戶事件觸發(fā)器 用戶事件觸發(fā)器指與數(shù)據(jù)庫定義語句或用戶的登錄用戶事件觸發(fā)器指與數(shù)據(jù)庫定義語句或用戶的登錄/注銷等事注銷等事件相關(guān)的觸發(fā)器。這些事件包括以下語句,并且可以規(guī)定觸發(fā)件相關(guān)的觸發(fā)器。這些事

32、件包括以下語句,并且可以規(guī)定觸發(fā)時(shí)間時(shí)間BEFORE或或AFTER。 【例3-3】創(chuàng)建保存系統(tǒng)操作日志的用戶事件觸發(fā)器。create or replaceTRIGGER SCOTT.TR_DDLAFTER LOGON ON SCHEMABEGIN INSERT INTO SCOTT.SYSLOG VALUES(USER,SYSDATE);END;教教師師演演示示講講解解2022-2-20OracleOracle數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程數(shù)據(jù)庫管理與應(yīng)用實(shí)例教程9.4 eBuy中的典型觸發(fā)器插入型觸發(fā)器插入型觸發(fā)器 【例4-1】在用戶方案SCOTT的商品表GOODS中插入數(shù)據(jù)記錄時(shí)需要進(jìn)行如下檢查:當(dāng)試圖往GOODS表中插入在商品類別表TYPES中并不存在的商品類別編號(hào)t_ID時(shí),返回一條類別錯(cuò)誤的消息;否

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論