




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1第8章:子程序、程序包和觸發(fā)器1第8章:子程序、程序包和觸發(fā)器1任務(wù)分解
任務(wù)1:通過(guò)過(guò)程統(tǒng)計(jì)不同部門的員工人數(shù)。任務(wù)2:通過(guò)過(guò)程查詢雇員信息。任務(wù)3:通過(guò)函數(shù)查詢雇員信息。任務(wù)4:使用程序包。任務(wù)5:通過(guò)觸發(fā)器進(jìn)行安全性檢查。任務(wù)6:通過(guò)觸發(fā)器跟蹤修改雇員信息的行為。任務(wù)7:通過(guò)觸發(fā)器為主鍵生成自增序列號(hào)。任務(wù)8:通過(guò)觸發(fā)器在視圖中插入數(shù)據(jù)。任務(wù)9:通過(guò)觸發(fā)器跟蹤用戶新建數(shù)據(jù)庫(kù)行為。任務(wù)10:通過(guò)觸發(fā)器跟蹤用戶信息。任務(wù)分解任務(wù)1:通過(guò)過(guò)程統(tǒng)計(jì)不同部門的員工人數(shù)。23任務(wù)5任務(wù)5.通過(guò)觸發(fā)器進(jìn)行安全性檢查。3任務(wù)5任務(wù)5.通過(guò)觸發(fā)器進(jìn)行安全3觸發(fā)器作用觸發(fā)器比數(shù)據(jù)庫(kù)本身標(biāo)準(zhǔn)的功能有更精細(xì)和更復(fù)雜的數(shù)據(jù)控制能力,主要用于維護(hù)那些通過(guò)創(chuàng)建表的聲明約束不可能實(shí)現(xiàn)的復(fù)雜的完整性約束,并對(duì)特定事件進(jìn)行監(jiān)控、響應(yīng)和審計(jì)等。觸發(fā)器作用4觸發(fā)器示例體驗(yàn)
【例8.26】在emp表上建立觸發(fā)器。在對(duì)emp表插入,更新,刪除之前觸發(fā),目的是不允許在周末更改表。
觸發(fā)器示例體驗(yàn) 【例8.26】在emp表上建立觸發(fā)器。在對(duì)e5觸發(fā)器示例體驗(yàn)觸發(fā)器示例體驗(yàn)6觸發(fā)器概述觸發(fā)器是關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)提供的一項(xiàng)技術(shù),當(dāng)特定對(duì)象上特定事件出現(xiàn)時(shí),由系統(tǒng)自動(dòng)觸發(fā)執(zhí)行的代碼塊。數(shù)據(jù)庫(kù)觸發(fā)器能夠執(zhí)行的功能包括以下幾方面:①自動(dòng)生成派生數(shù)據(jù)。②實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)完整性規(guī)則。③實(shí)施更復(fù)雜的安全性檢查。④提供審計(jì)和日志記錄。⑤啟用復(fù)雜的業(yè)務(wù)邏輯。觸發(fā)器概述7CREATE[ORREPLACE]TRIGGER觸發(fā)器名觸發(fā)時(shí)間觸發(fā)事件ON對(duì)象名[REFERENCING_CLAUSE][FOREACHROW][FOREACHROW[WHENTRIGGER_CONDITION]]PL/SQL語(yǔ)句觸發(fā)器的基本語(yǔ)法規(guī)則CREATE[ORREPLACE]TRIGGER觸發(fā)8規(guī)則說(shuō)明觸發(fā)時(shí)間:指明觸發(fā)器何時(shí)執(zhí)行,取值有:{BEFORE|AFTER|INSTEADOF}觸發(fā)事件:指明哪些數(shù)據(jù)庫(kù)動(dòng)作會(huì)觸發(fā)此觸發(fā)器,包括 {DML_EVENT|DDL_EVENT|DATABASE_EVENT},對(duì)象名:取值包括{[TABLE|VIEW]|[SCHEMA.]|[DATABASE]}REFERENCING_CLAUSE:用來(lái)引用正在處于修改狀態(tài)下表中對(duì)應(yīng)行的數(shù)據(jù)。FOREACHROW:觸發(fā)器對(duì)表中的每一行執(zhí)行一次,即為行級(jí)觸發(fā)器。WHEN子句代表觸發(fā)器限制條件規(guī)則說(shuō)明觸發(fā)時(shí)間:指明觸發(fā)器何時(shí)執(zhí)行,取值有:9觸發(fā)器類型
Oracle具有不同類型的觸發(fā)器,可以完成不同的任務(wù),按照觸發(fā)器的觸發(fā)事件和觸發(fā)對(duì)象的不同,觸發(fā)器一般分為以下幾種:①DML觸發(fā)器②INSTEADOF觸發(fā)器③DDL觸發(fā)器④系統(tǒng)觸發(fā)器觸發(fā)器類型10DML觸發(fā)器建立在基本表上的觸發(fā)器稱為DML觸發(fā)器。DML觸發(fā)器建立在基本表上的觸發(fā)器稱為DML觸發(fā)器。1112DML觸發(fā)器觸發(fā)器時(shí)機(jī)BEFORE觸發(fā)器AFTER觸發(fā)器。觸發(fā)器所依賴的表對(duì)象不同語(yǔ)句級(jí)觸發(fā)器行級(jí)觸發(fā)器foreachrow12DML觸發(fā)器觸發(fā)器時(shí)機(jī)12DML觸發(fā)器BEFORE觸發(fā)器和AFTER觸發(fā)器。執(zhí)行的順序:BEFORE觸發(fā)器--約束檢查--更新表--AFTER觸發(fā)器。BEFORE觸發(fā)器是在約束之前執(zhí)行的,通常用于:設(shè)置或修改被更新或插入的列值。檢查復(fù)雜的安全規(guī)則,如限制時(shí)間等。增強(qiáng)商業(yè)應(yīng)用規(guī)則。DML觸發(fā)器BEFORE觸發(fā)器和AFTER觸發(fā)器。執(zhí)行的13DML觸發(fā)器AFTER觸發(fā)器是在BEFORE觸發(fā)器、約束檢查以及更新表后才執(zhí)行的。一般用于:用戶信息的審計(jì)。導(dǎo)出數(shù)據(jù)的生成,如果導(dǎo)出數(shù)據(jù)是存儲(chǔ)到其他表中,而不是觸發(fā)器所依賴的表,則使用AFTER;如果導(dǎo)出數(shù)據(jù)是存儲(chǔ)到當(dāng)前觸發(fā)器依賴的表,則觸發(fā)器必須定義成BEFORE觸發(fā)器。遠(yuǎn)程數(shù)據(jù)的復(fù)制。DML觸發(fā)器AFTER觸發(fā)器是在BEFORE觸發(fā)器、約束14語(yǔ)句級(jí)觸發(fā)器觸發(fā)器的語(yǔ)句中未使用FOREACHROW子句。語(yǔ)句級(jí)觸發(fā)器與INSERT、DELETE、UPDATE或者組合上進(jìn)行關(guān)聯(lián)。語(yǔ)句觸發(fā)器都只針對(duì)指定語(yǔ)句激活一次。語(yǔ)句級(jí)觸發(fā)器觸發(fā)器的語(yǔ)句中未使用FOREACHROW子句15實(shí)訓(xùn)5①掌握語(yǔ)句級(jí)觸發(fā)器的原理。②語(yǔ)句級(jí)觸發(fā)器的編寫方法。③測(cè)試語(yǔ)句級(jí)觸發(fā)器是否生效。
完成了任務(wù)5,請(qǐng)嘗試實(shí)訓(xùn)5實(shí)訓(xùn)5①掌握語(yǔ)句級(jí)觸發(fā)器的原理。完成了任務(wù)5,請(qǐng)嘗試實(shí)訓(xùn)51617任務(wù)6任務(wù)6.通過(guò)觸發(fā)器跟蹤修改雇員信息的行為17任務(wù)6任務(wù)6.通過(guò)觸發(fā)器跟蹤修改雇員信息的行為17任務(wù)6任務(wù)618任務(wù)6任務(wù)61920任務(wù)6
思考:上面的例子中,只記錄了操作的用戶名和時(shí)間,如果需要記錄下用戶的動(dòng)作,該如何解決?20任務(wù)6思考:上面的例子中,只記錄了操作的用戶名和時(shí)20任務(wù)6DML觸發(fā)器有三個(gè)可用來(lái)確認(rèn)執(zhí)行何種操作的邏輯表達(dá)式。任務(wù)6DML觸發(fā)器有三個(gè)可用來(lái)確認(rèn)執(zhí)行何種操作的邏輯表達(dá)式。21任務(wù)6或者任務(wù)6或者22任務(wù)6任務(wù)623任務(wù)6任務(wù)624實(shí)訓(xùn)6①掌握語(yǔ)句級(jí)觸發(fā)器的原理。②練習(xí):建立一觸發(fā)器,用于審計(jì)對(duì)HR用戶的jobs表的操作行為。
完成了任務(wù)6,請(qǐng)嘗試實(shí)訓(xùn)6實(shí)訓(xùn)6①掌握語(yǔ)句級(jí)觸發(fā)器的原理。完成了任務(wù)6,請(qǐng)嘗試實(shí)訓(xùn)62526任務(wù)7任務(wù)7.通過(guò)行級(jí)觸發(fā)器為主鍵生成自增序列號(hào)。
26任務(wù)7任務(wù)7.通過(guò)行級(jí)觸發(fā)器為主鍵生成自增2627什么是行級(jí)觸發(fā)器
進(jìn)一步思考:上面的例子中,如何使觸發(fā)器在執(zhí)行過(guò)程中每行觸發(fā)一次?工作情境:引入行級(jí)觸發(fā)器。27什么是行級(jí)觸發(fā)器進(jìn)一步思考:上面的例子中,如何使觸27行級(jí)觸發(fā)器行級(jí)觸發(fā)器是指執(zhí)行DML操作時(shí),每操作一行觸發(fā)器就執(zhí)行一次。行級(jí)觸發(fā)器使用WHEN條件,用于控制觸發(fā)器的執(zhí)行。WHEN子句的語(yǔ)法為:WHENtrigger_condition說(shuō)明:trigger_condition是邏輯表達(dá)式,該表達(dá)式將為每行求值。行級(jí)觸發(fā)器行級(jí)觸發(fā)器是指執(zhí)行DML操作時(shí),每操作一行觸發(fā)器就28:old和:new標(biāo)識(shí)符行級(jí)觸發(fā)器中引入了:old和:new兩個(gè)標(biāo)識(shí)符:old和:new記錄可以在trigger_condition內(nèi)部引用,但不需使用冒號(hào)。該冒號(hào)只在觸發(fā)器體內(nèi)有效。:old和:new標(biāo)識(shí)符行級(jí)觸發(fā)器中引入了:old和:new29每行觸發(fā)【例8.29】重新修改【例8.28】觸發(fā)器。每行觸發(fā)【例8.29】重新修改【例8.28】觸發(fā)器。30測(cè)試測(cè)試31任務(wù)7:為主鍵生成自增序列號(hào)任務(wù)7:為主鍵生成自增序列號(hào)32實(shí)訓(xùn)7①掌握行級(jí)觸發(fā)器的原理。②行級(jí)觸發(fā)器的編寫方法。練習(xí):創(chuàng)建一行級(jí)觸發(fā)器,為學(xué)生信息表的主鍵生成自增序列號(hào)。完成了任務(wù)7,請(qǐng)嘗試實(shí)訓(xùn)7實(shí)訓(xùn)7①掌握行級(jí)觸發(fā)器的原理。完成了任務(wù)7,請(qǐng)嘗試實(shí)訓(xùn)73334任務(wù)8任務(wù)8.通過(guò)觸發(fā)器在視圖中插入數(shù)據(jù)。34任務(wù)8任務(wù)8.通過(guò)觸發(fā)器在視圖中34任務(wù)8替代觸發(fā)器是行級(jí)觸發(fā)器。替代觸發(fā)器用INSTEADOF來(lái)規(guī)定,它執(zhí)行一個(gè)替代操作來(lái)代替對(duì)視圖的操作,對(duì)視圖的操作最終會(huì)轉(zhuǎn)換為基本表的操作。問(wèn)題:對(duì)視圖view_emp_dept進(jìn)行插入數(shù)據(jù),結(jié)果報(bào)錯(cuò)。這種情況該如何解決?(視圖view_emp_dept的數(shù)據(jù)來(lái)源于emp表的字段empno,ename,job,emp.deptno,條件是emp.deptno=dept.deptno)
(1)創(chuàng)建視圖(2)對(duì)視圖進(jìn)行插入操作(3)在視圖創(chuàng)建INSTEADOF觸發(fā)器(4)重新對(duì)視圖進(jìn)行插入操作任務(wù)8替代觸發(fā)器是行級(jí)觸發(fā)器。替代觸發(fā)器用INSTEADO35任務(wù)8任務(wù)836任務(wù)8任務(wù)837實(shí)訓(xùn)8①掌握替代觸發(fā)器的原理。②創(chuàng)建替代觸發(fā)器。③替代觸發(fā)器的測(cè)試方法。
完成了任務(wù)8,請(qǐng)嘗試實(shí)訓(xùn)8實(shí)訓(xùn)8①掌握替代觸發(fā)器的原理。完成了任務(wù)8,請(qǐng)嘗試實(shí)訓(xùn)83839任務(wù)9任務(wù)9.通過(guò)觸發(fā)器跟蹤用戶新建數(shù)據(jù)庫(kù)對(duì)象的行為。39任務(wù)9任務(wù)9.通過(guò)觸發(fā)器跟蹤用戶39任務(wù)9DDL觸發(fā)器是建立在模式級(jí)操作上的觸發(fā)器。激發(fā)DDL操作包括:CREATE、ALTER、DROP等。作用主要是防止DDL操作引起的破壞或提供相應(yīng)的安全監(jiān)控。DDL觸發(fā)器通過(guò)事件屬性函數(shù)獲得有關(guān)觸發(fā)事件的信息。任務(wù)9DDL觸發(fā)器是建立在模式級(jí)操作上的觸發(fā)器。激發(fā)DDL操40任務(wù)9【例8.32】創(chuàng)建DDL觸發(fā)器,審計(jì)記錄用戶所創(chuàng)建對(duì)象的信息(1)創(chuàng)建審計(jì)記錄表(2)建立DDL觸發(fā)器logcreation(3)測(cè)試DDL觸發(fā)器任務(wù)9【例8.32】創(chuàng)建DDL觸發(fā)器,審計(jì)記錄用戶所創(chuàng)建41任務(wù)9任務(wù)942實(shí)訓(xùn)9①掌握DDL觸發(fā)器的原理。②創(chuàng)建DDL觸發(fā)器。③DDL觸發(fā)器的測(cè)試方法。
完成了任務(wù)9,請(qǐng)嘗試實(shí)訓(xùn)9實(shí)訓(xùn)9①掌握DDL觸發(fā)器的原理。完成了任務(wù)9,請(qǐng)嘗試實(shí)訓(xùn)94344任務(wù)10任務(wù)10.通過(guò)觸發(fā)器跟蹤用戶登錄信息。44任務(wù)10任務(wù)10.通過(guò)觸發(fā)器跟蹤用戶44任務(wù)10系統(tǒng)觸發(fā)器是建立在數(shù)據(jù)庫(kù)級(jí)別上的觸發(fā)器,其觸發(fā)事件包括服務(wù)器的啟動(dòng)或關(guān)閉,用戶的登錄或退出,以及服務(wù)器錯(cuò)誤等。創(chuàng)建系統(tǒng)觸發(fā)器的語(yǔ)法:任務(wù)10系統(tǒng)觸發(fā)器是建立在數(shù)據(jù)庫(kù)級(jí)別上的觸發(fā)器,其觸發(fā)事件包45任務(wù)10database_event_list是一個(gè)或多個(gè)數(shù)據(jù)庫(kù)事件,如下表:任務(wù)10database_event_list是一個(gè)或多個(gè)數(shù)46任務(wù)10例如:創(chuàng)建當(dāng)數(shù)據(jù)庫(kù)啟動(dòng)時(shí)的系統(tǒng)觸發(fā)器結(jié)構(gòu)如下:任務(wù)10例如:創(chuàng)建當(dāng)數(shù)據(jù)庫(kù)啟動(dòng)時(shí)的系統(tǒng)觸發(fā)器結(jié)構(gòu)如下:47任務(wù)10【例8.34】創(chuàng)建系統(tǒng)觸發(fā)器,記錄當(dāng)次啟動(dòng)數(shù)據(jù)庫(kù)以來(lái)登錄的用戶。(1)創(chuàng)建一個(gè)用戶登錄的日志記錄表(包含登錄用戶名、登錄時(shí)間、數(shù)據(jù)庫(kù)名字和實(shí)例號(hào))(2)授予創(chuàng)建觸發(fā)器的用戶administerdatabasetrigger權(quán)限(注意:普通用戶需具有此權(quán)限才能創(chuàng)建系統(tǒng)觸發(fā)器)
grantadministerdatabasetriggertoscott;(3)創(chuàng)建系統(tǒng)啟動(dòng)的觸發(fā)器(4)創(chuàng)建登錄系統(tǒng)的觸發(fā)器(5)測(cè)試任務(wù)10【例8.34】創(chuàng)建系統(tǒng)觸發(fā)器,記錄當(dāng)次啟動(dòng)數(shù)據(jù)庫(kù)以48任務(wù)10系統(tǒng)觸發(fā)器的數(shù)據(jù)庫(kù)事件屬性函數(shù)獲得有關(guān)觸發(fā)事件信息。任務(wù)10系統(tǒng)觸發(fā)器的數(shù)據(jù)庫(kù)事件屬性函數(shù)獲得有關(guān)觸發(fā)事件信息。49任務(wù)10任務(wù)1050任務(wù)10
總結(jié):在本例中使用了兩個(gè)系統(tǒng)觸發(fā)器,分別為系統(tǒng)啟動(dòng)之后和登錄之后觸發(fā)(afterstartup和afterlogon),登錄觸發(fā)器用于記錄用戶登錄日志,啟動(dòng)觸發(fā)器用于刪除歷史登錄日志,只記錄當(dāng)此次登錄情況。任務(wù)10總結(jié):在本例中使用了兩個(gè)系統(tǒng)觸發(fā)器,分別為系統(tǒng)啟51實(shí)訓(xùn)10①掌握DDL觸發(fā)器的原理。②創(chuàng)建DDL觸發(fā)器。③DDL觸發(fā)器的測(cè)試方法。
完成了任務(wù)10,請(qǐng)嘗試實(shí)訓(xùn)10實(shí)訓(xùn)10①掌握DDL觸發(fā)器的原理。完成了任務(wù)10,請(qǐng)嘗試實(shí)52管理觸發(fā)器1.激活和禁用觸發(fā)器ALTERTRIGGERtriggername{DISABLE|ENABLE};2.修改觸發(fā)器使用CREATEORREPLACETRIGGER語(yǔ)句直接修改觸發(fā)器主體內(nèi)容,如有同名觸發(fā)器3.重新編譯觸發(fā)器4.查看觸發(fā)器的有關(guān)信息
ALTERTRIGGERtrigger_nameCOMPILE;
5.刪除觸發(fā)器DROPTRIGGERtriggername;管理觸發(fā)器1.激活和禁用觸發(fā)器5354作業(yè)請(qǐng)登錄精品課程-》 2009年國(guó)家級(jí)精品課程大型數(shù)據(jù)庫(kù)管理系統(tǒng)朱亞興計(jì)算機(jī)工程技術(shù)學(xué)院-》 網(wǎng)絡(luò)課程-》 在線學(xué)習(xí)找到相應(yīng)的“學(xué)習(xí)情境”進(jìn)行練習(xí)54作業(yè)請(qǐng)登錄54小結(jié)過(guò)程、函數(shù)、程序包和觸發(fā)器都是命名的PL/SQL塊,具有模塊化、可重用、易維護(hù)性和安全性強(qiáng)等優(yōu)點(diǎn)。過(guò)程能夠完成一項(xiàng)或多項(xiàng)特定任務(wù),具有3種類型參數(shù),可以靈活地進(jìn)行傳入值和返回值。函數(shù)向調(diào)用程序返回一個(gè)值,或者借助于PL/SQL賦值語(yǔ)句或條件語(yǔ)句。過(guò)程或函數(shù)在首次執(zhí)行時(shí)被存儲(chǔ)到內(nèi)存中,然后被其他模塊調(diào)用。程序包是PL/SQL對(duì)象的集合。包括程序包規(guī)范和程序包體。觸發(fā)器是當(dāng)滿足特定事件時(shí)自動(dòng)執(zhí)行的存儲(chǔ)過(guò)程。按照觸發(fā)事件和觸發(fā)對(duì)象的不同,觸發(fā)器一般分為以下幾種:DML觸發(fā)器、替代觸發(fā)器、DDL觸發(fā)器和系統(tǒng)觸發(fā)器。小結(jié)過(guò)程、函數(shù)、程序包和觸發(fā)器都是命名的PL/SQL塊,具有55謝謝!56謝謝!565657第8章:子程序、程序包和觸發(fā)器1第8章:子程序、程序包和觸發(fā)器57任務(wù)分解
任務(wù)1:通過(guò)過(guò)程統(tǒng)計(jì)不同部門的員工人數(shù)。任務(wù)2:通過(guò)過(guò)程查詢雇員信息。任務(wù)3:通過(guò)函數(shù)查詢雇員信息。任務(wù)4:使用程序包。任務(wù)5:通過(guò)觸發(fā)器進(jìn)行安全性檢查。任務(wù)6:通過(guò)觸發(fā)器跟蹤修改雇員信息的行為。任務(wù)7:通過(guò)觸發(fā)器為主鍵生成自增序列號(hào)。任務(wù)8:通過(guò)觸發(fā)器在視圖中插入數(shù)據(jù)。任務(wù)9:通過(guò)觸發(fā)器跟蹤用戶新建數(shù)據(jù)庫(kù)行為。任務(wù)10:通過(guò)觸發(fā)器跟蹤用戶信息。任務(wù)分解任務(wù)1:通過(guò)過(guò)程統(tǒng)計(jì)不同部門的員工人數(shù)。5859任務(wù)5任務(wù)5.通過(guò)觸發(fā)器進(jìn)行安全性檢查。3任務(wù)5任務(wù)5.通過(guò)觸發(fā)器進(jìn)行安全59觸發(fā)器作用觸發(fā)器比數(shù)據(jù)庫(kù)本身標(biāo)準(zhǔn)的功能有更精細(xì)和更復(fù)雜的數(shù)據(jù)控制能力,主要用于維護(hù)那些通過(guò)創(chuàng)建表的聲明約束不可能實(shí)現(xiàn)的復(fù)雜的完整性約束,并對(duì)特定事件進(jìn)行監(jiān)控、響應(yīng)和審計(jì)等。觸發(fā)器作用60觸發(fā)器示例體驗(yàn)
【例8.26】在emp表上建立觸發(fā)器。在對(duì)emp表插入,更新,刪除之前觸發(fā),目的是不允許在周末更改表。
觸發(fā)器示例體驗(yàn) 【例8.26】在emp表上建立觸發(fā)器。在對(duì)e61觸發(fā)器示例體驗(yàn)觸發(fā)器示例體驗(yàn)62觸發(fā)器概述觸發(fā)器是關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)提供的一項(xiàng)技術(shù),當(dāng)特定對(duì)象上特定事件出現(xiàn)時(shí),由系統(tǒng)自動(dòng)觸發(fā)執(zhí)行的代碼塊。數(shù)據(jù)庫(kù)觸發(fā)器能夠執(zhí)行的功能包括以下幾方面:①自動(dòng)生成派生數(shù)據(jù)。②實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)完整性規(guī)則。③實(shí)施更復(fù)雜的安全性檢查。④提供審計(jì)和日志記錄。⑤啟用復(fù)雜的業(yè)務(wù)邏輯。觸發(fā)器概述63CREATE[ORREPLACE]TRIGGER觸發(fā)器名觸發(fā)時(shí)間觸發(fā)事件ON對(duì)象名[REFERENCING_CLAUSE][FOREACHROW][FOREACHROW[WHENTRIGGER_CONDITION]]PL/SQL語(yǔ)句觸發(fā)器的基本語(yǔ)法規(guī)則CREATE[ORREPLACE]TRIGGER觸發(fā)64規(guī)則說(shuō)明觸發(fā)時(shí)間:指明觸發(fā)器何時(shí)執(zhí)行,取值有:{BEFORE|AFTER|INSTEADOF}觸發(fā)事件:指明哪些數(shù)據(jù)庫(kù)動(dòng)作會(huì)觸發(fā)此觸發(fā)器,包括 {DML_EVENT|DDL_EVENT|DATABASE_EVENT},對(duì)象名:取值包括{[TABLE|VIEW]|[SCHEMA.]|[DATABASE]}REFERENCING_CLAUSE:用來(lái)引用正在處于修改狀態(tài)下表中對(duì)應(yīng)行的數(shù)據(jù)。FOREACHROW:觸發(fā)器對(duì)表中的每一行執(zhí)行一次,即為行級(jí)觸發(fā)器。WHEN子句代表觸發(fā)器限制條件規(guī)則說(shuō)明觸發(fā)時(shí)間:指明觸發(fā)器何時(shí)執(zhí)行,取值有:65觸發(fā)器類型
Oracle具有不同類型的觸發(fā)器,可以完成不同的任務(wù),按照觸發(fā)器的觸發(fā)事件和觸發(fā)對(duì)象的不同,觸發(fā)器一般分為以下幾種:①DML觸發(fā)器②INSTEADOF觸發(fā)器③DDL觸發(fā)器④系統(tǒng)觸發(fā)器觸發(fā)器類型66DML觸發(fā)器建立在基本表上的觸發(fā)器稱為DML觸發(fā)器。DML觸發(fā)器建立在基本表上的觸發(fā)器稱為DML觸發(fā)器。6768DML觸發(fā)器觸發(fā)器時(shí)機(jī)BEFORE觸發(fā)器AFTER觸發(fā)器。觸發(fā)器所依賴的表對(duì)象不同語(yǔ)句級(jí)觸發(fā)器行級(jí)觸發(fā)器foreachrow12DML觸發(fā)器觸發(fā)器時(shí)機(jī)68DML觸發(fā)器BEFORE觸發(fā)器和AFTER觸發(fā)器。執(zhí)行的順序:BEFORE觸發(fā)器--約束檢查--更新表--AFTER觸發(fā)器。BEFORE觸發(fā)器是在約束之前執(zhí)行的,通常用于:設(shè)置或修改被更新或插入的列值。檢查復(fù)雜的安全規(guī)則,如限制時(shí)間等。增強(qiáng)商業(yè)應(yīng)用規(guī)則。DML觸發(fā)器BEFORE觸發(fā)器和AFTER觸發(fā)器。執(zhí)行的69DML觸發(fā)器AFTER觸發(fā)器是在BEFORE觸發(fā)器、約束檢查以及更新表后才執(zhí)行的。一般用于:用戶信息的審計(jì)。導(dǎo)出數(shù)據(jù)的生成,如果導(dǎo)出數(shù)據(jù)是存儲(chǔ)到其他表中,而不是觸發(fā)器所依賴的表,則使用AFTER;如果導(dǎo)出數(shù)據(jù)是存儲(chǔ)到當(dāng)前觸發(fā)器依賴的表,則觸發(fā)器必須定義成BEFORE觸發(fā)器。遠(yuǎn)程數(shù)據(jù)的復(fù)制。DML觸發(fā)器AFTER觸發(fā)器是在BEFORE觸發(fā)器、約束70語(yǔ)句級(jí)觸發(fā)器觸發(fā)器的語(yǔ)句中未使用FOREACHROW子句。語(yǔ)句級(jí)觸發(fā)器與INSERT、DELETE、UPDATE或者組合上進(jìn)行關(guān)聯(lián)。語(yǔ)句觸發(fā)器都只針對(duì)指定語(yǔ)句激活一次。語(yǔ)句級(jí)觸發(fā)器觸發(fā)器的語(yǔ)句中未使用FOREACHROW子句71實(shí)訓(xùn)5①掌握語(yǔ)句級(jí)觸發(fā)器的原理。②語(yǔ)句級(jí)觸發(fā)器的編寫方法。③測(cè)試語(yǔ)句級(jí)觸發(fā)器是否生效。
完成了任務(wù)5,請(qǐng)嘗試實(shí)訓(xùn)5實(shí)訓(xùn)5①掌握語(yǔ)句級(jí)觸發(fā)器的原理。完成了任務(wù)5,請(qǐng)嘗試實(shí)訓(xùn)57273任務(wù)6任務(wù)6.通過(guò)觸發(fā)器跟蹤修改雇員信息的行為17任務(wù)6任務(wù)6.通過(guò)觸發(fā)器跟蹤修改雇員信息的行為73任務(wù)6任務(wù)674任務(wù)6任務(wù)67576任務(wù)6
思考:上面的例子中,只記錄了操作的用戶名和時(shí)間,如果需要記錄下用戶的動(dòng)作,該如何解決?20任務(wù)6思考:上面的例子中,只記錄了操作的用戶名和時(shí)76任務(wù)6DML觸發(fā)器有三個(gè)可用來(lái)確認(rèn)執(zhí)行何種操作的邏輯表達(dá)式。任務(wù)6DML觸發(fā)器有三個(gè)可用來(lái)確認(rèn)執(zhí)行何種操作的邏輯表達(dá)式。77任務(wù)6或者任務(wù)6或者78任務(wù)6任務(wù)679任務(wù)6任務(wù)680實(shí)訓(xùn)6①掌握語(yǔ)句級(jí)觸發(fā)器的原理。②練習(xí):建立一觸發(fā)器,用于審計(jì)對(duì)HR用戶的jobs表的操作行為。
完成了任務(wù)6,請(qǐng)嘗試實(shí)訓(xùn)6實(shí)訓(xùn)6①掌握語(yǔ)句級(jí)觸發(fā)器的原理。完成了任務(wù)6,請(qǐng)嘗試實(shí)訓(xùn)68182任務(wù)7任務(wù)7.通過(guò)行級(jí)觸發(fā)器為主鍵生成自增序列號(hào)。
26任務(wù)7任務(wù)7.通過(guò)行級(jí)觸發(fā)器為主鍵生成自增8283什么是行級(jí)觸發(fā)器
進(jìn)一步思考:上面的例子中,如何使觸發(fā)器在執(zhí)行過(guò)程中每行觸發(fā)一次?工作情境:引入行級(jí)觸發(fā)器。27什么是行級(jí)觸發(fā)器進(jìn)一步思考:上面的例子中,如何使觸83行級(jí)觸發(fā)器行級(jí)觸發(fā)器是指執(zhí)行DML操作時(shí),每操作一行觸發(fā)器就執(zhí)行一次。行級(jí)觸發(fā)器使用WHEN條件,用于控制觸發(fā)器的執(zhí)行。WHEN子句的語(yǔ)法為:WHENtrigger_condition說(shuō)明:trigger_condition是邏輯表達(dá)式,該表達(dá)式將為每行求值。行級(jí)觸發(fā)器行級(jí)觸發(fā)器是指執(zhí)行DML操作時(shí),每操作一行觸發(fā)器就84:old和:new標(biāo)識(shí)符行級(jí)觸發(fā)器中引入了:old和:new兩個(gè)標(biāo)識(shí)符:old和:new記錄可以在trigger_condition內(nèi)部引用,但不需使用冒號(hào)。該冒號(hào)只在觸發(fā)器體內(nèi)有效。:old和:new標(biāo)識(shí)符行級(jí)觸發(fā)器中引入了:old和:new85每行觸發(fā)【例8.29】重新修改【例8.28】觸發(fā)器。每行觸發(fā)【例8.29】重新修改【例8.28】觸發(fā)器。86測(cè)試測(cè)試87任務(wù)7:為主鍵生成自增序列號(hào)任務(wù)7:為主鍵生成自增序列號(hào)88實(shí)訓(xùn)7①掌握行級(jí)觸發(fā)器的原理。②行級(jí)觸發(fā)器的編寫方法。練習(xí):創(chuàng)建一行級(jí)觸發(fā)器,為學(xué)生信息表的主鍵生成自增序列號(hào)。完成了任務(wù)7,請(qǐng)嘗試實(shí)訓(xùn)7實(shí)訓(xùn)7①掌握行級(jí)觸發(fā)器的原理。完成了任務(wù)7,請(qǐng)嘗試實(shí)訓(xùn)78990任務(wù)8任務(wù)8.通過(guò)觸發(fā)器在視圖中插入數(shù)據(jù)。34任務(wù)8任務(wù)8.通過(guò)觸發(fā)器在視圖中90任務(wù)8替代觸發(fā)器是行級(jí)觸發(fā)器。替代觸發(fā)器用INSTEADOF來(lái)規(guī)定,它執(zhí)行一個(gè)替代操作來(lái)代替對(duì)視圖的操作,對(duì)視圖的操作最終會(huì)轉(zhuǎn)換為基本表的操作。問(wèn)題:對(duì)視圖view_emp_dept進(jìn)行插入數(shù)據(jù),結(jié)果報(bào)錯(cuò)。這種情況該如何解決?(視圖view_emp_dept的數(shù)據(jù)來(lái)源于emp表的字段empno,ename,job,emp.deptno,條件是emp.deptno=dept.deptno)
(1)創(chuàng)建視圖(2)對(duì)視圖進(jìn)行插入操作(3)在視圖創(chuàng)建INSTEADOF觸發(fā)器(4)重新對(duì)視圖進(jìn)行插入操作任務(wù)8替代觸發(fā)器是行級(jí)觸發(fā)器。替代觸發(fā)器用INSTEADO91任務(wù)8任務(wù)892任務(wù)8任務(wù)893實(shí)訓(xùn)8①掌握替代觸發(fā)器的原理。②創(chuàng)建替代觸發(fā)器。③替代觸發(fā)器的測(cè)試方法。
完成了任務(wù)8,請(qǐng)嘗試實(shí)訓(xùn)8實(shí)訓(xùn)8①掌握替代觸發(fā)器的原理。完成了任務(wù)8,請(qǐng)嘗試實(shí)訓(xùn)89495任務(wù)9任務(wù)9.通過(guò)觸發(fā)器跟蹤用戶新建數(shù)據(jù)庫(kù)對(duì)象的行為。39任務(wù)9任務(wù)9.通過(guò)觸發(fā)器跟蹤用戶95任務(wù)9DDL觸發(fā)器是建立在模式級(jí)操作上的觸發(fā)器。激發(fā)DDL操作包括:CREATE、ALTER、DROP等。作用主要是防止DDL操作引起的破壞或提供相應(yīng)的安全監(jiān)控。DDL觸發(fā)器通過(guò)事件屬性函數(shù)獲得有關(guān)觸發(fā)事件的信息。任務(wù)9DDL觸發(fā)器是建立在模式級(jí)操作上的觸發(fā)器。激發(fā)DDL操96任務(wù)9【例8.32】創(chuàng)建DDL觸發(fā)器,審計(jì)記錄用戶所創(chuàng)建對(duì)象的信息(1)創(chuàng)建審計(jì)記錄表(2)建立DDL觸發(fā)器logcreation(3)測(cè)試DDL觸發(fā)器任務(wù)9【例8.32】創(chuàng)建DDL觸發(fā)器,審計(jì)記錄用戶所創(chuàng)建97任務(wù)9任務(wù)998實(shí)訓(xùn)9①掌握DDL觸發(fā)器的原理。②創(chuàng)建DDL觸發(fā)器。③DDL觸發(fā)器的測(cè)試方法。
完成了任務(wù)9,請(qǐng)嘗試實(shí)訓(xùn)9實(shí)訓(xùn)9①掌握DDL觸發(fā)器的原理。完成了任務(wù)9,請(qǐng)嘗試實(shí)訓(xùn)999100任務(wù)10任務(wù)10.通過(guò)觸發(fā)器跟蹤用戶登錄信息。44任務(wù)10任務(wù)10.通過(guò)觸發(fā)器跟蹤用戶100任務(wù)10系統(tǒng)觸發(fā)器是建立在數(shù)據(jù)庫(kù)級(jí)別上的觸發(fā)器,其觸發(fā)事件包括服務(wù)器的啟動(dòng)或關(guān)閉,用戶的登錄或退出,以及服務(wù)器錯(cuò)誤等。創(chuàng)建系統(tǒng)觸發(fā)器的語(yǔ)法:任務(wù)10系統(tǒng)觸發(fā)器是建立在數(shù)據(jù)庫(kù)級(jí)別上的觸發(fā)器,其觸發(fā)事件包101任務(wù)10database_event_list是一個(gè)或多個(gè)數(shù)據(jù)庫(kù)事件,如下表:任務(wù)10database_event_list是一個(gè)或多個(gè)數(shù)102任務(wù)10例如:創(chuàng)建當(dāng)數(shù)據(jù)庫(kù)啟動(dòng)時(shí)的系統(tǒng)觸發(fā)器結(jié)構(gòu)如下:任務(wù)10例如:創(chuàng)建當(dāng)數(shù)據(jù)庫(kù)啟動(dòng)時(shí)的系統(tǒng)觸發(fā)器結(jié)構(gòu)如下:103任務(wù)10【例8.34】創(chuàng)建系統(tǒng)觸發(fā)器,記錄當(dāng)次啟動(dòng)數(shù)據(jù)庫(kù)以來(lái)登錄的用戶。(1)創(chuàng)建一個(gè)用戶登錄的日志記錄表(包含登錄用戶名、登錄時(shí)間、數(shù)據(jù)庫(kù)名字和實(shí)例號(hào))(2)授予創(chuàng)建觸發(fā)器的用戶administerdatabasetrigger權(quán)限(注意:普通用戶需具有此權(quán)限才能創(chuàng)建系統(tǒng)觸發(fā)器)
grantad
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)四年級(jí)上冊(cè)英語(yǔ)試卷單選題100道及答案
- 2025機(jī)械設(shè)備租賃合同樣本
- 2025合作合同書【合作經(jīng)營(yíng)合同書】
- 上海中介租房服務(wù)合同書
- 投資合作合同書范例二零二五年
- 回購(gòu)協(xié)議合同書二零二五年
- 2025年上海長(zhǎng)期服務(wù)合同
- 2025年餐飲企業(yè)供應(yīng)合同樣本
- 2025修訂后造價(jià)師聘用合同
- 2025物業(yè)管理服務(wù)合同(派遣制范本)
- 小學(xué)三年級(jí)音樂(lè)《馬蘭謠》課件
- “當(dāng)代文化參與”學(xué)習(xí)任務(wù)群相關(guān)單元的設(shè)計(jì)思路與教學(xué)建議課件(共51張PPT)
- 提高臥床患者踝泵運(yùn)動(dòng)的執(zhí)行率品管圈匯報(bào)書模板課件
- 同理心的應(yīng)用教學(xué)教材課件
- DB4102-T 025-2021海綿城市建設(shè)施工與質(zhì)量驗(yàn)收規(guī)范-(高清現(xiàn)行)
- 城市軌道交通安全管理隱患清單
- 錫膏使用記錄表
- 兒童保健學(xué)課件:緒論
- 中小學(xué)校園安全穩(wěn)定工作崗位責(zé)任清單
- 校園安全存在問(wèn)題及對(duì)策
- NY∕T 309-1996 全國(guó)耕地類型區(qū)、耕地地力等級(jí)劃分
評(píng)論
0/150
提交評(píng)論