第08章(筆記).ppt_第1頁(yè)
第08章(筆記).ppt_第2頁(yè)
第08章(筆記).ppt_第3頁(yè)
第08章(筆記).ppt_第4頁(yè)
第08章(筆記).ppt_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、觸發(fā)器概述,為什么要用觸發(fā)器 實(shí)現(xiàn)企業(yè)自定義的業(yè)務(wù)規(guī)則,它比約束更為復(fù)雜和強(qiáng)大。 案例 不能在星期六、星期日更新員工信息。 更新員工工資,只能增加,不能減少。 添加員工信息,如果該部門(mén)員工人數(shù)超過(guò)3人,則不能再添加。 解決 使用觸發(fā)器。,上面的業(yè)務(wù)規(guī)則,用普通的約束都是不能實(shí)現(xiàn)的!,觸發(fā)器概述,概念 數(shù)據(jù)庫(kù)特定事件發(fā)生時(shí)所自動(dòng)執(zhí)行的塊。 用途 當(dāng)表數(shù)據(jù)發(fā)生改變時(shí),校驗(yàn)表(主要用途)。 根據(jù)數(shù)據(jù)庫(kù)發(fā)生的事件來(lái)完成數(shù)據(jù)庫(kù)維護(hù)工作。 事件分類(lèi)(根據(jù)監(jiān)控對(duì)象來(lái)分類(lèi)) DML觸發(fā)器:監(jiān)控表 Instead of觸發(fā)器:監(jiān)控視圖 數(shù)據(jù)庫(kù)事件:監(jiān)控?cái)?shù)據(jù)庫(kù)啟動(dòng)、登錄、關(guān)閉等事件,工作中最常用,必須掌握!,DM

2、L觸發(fā)器,概念 當(dāng)表發(fā)生數(shù)據(jù)修改事件(增加、刪除、修改)自動(dòng)執(zhí)行的PL/SQL 塊。 語(yǔ)法,CREATE OR REPLACE TRIGGER 觸發(fā)器名稱(chēng)AFTER|BEFORE -指定觸發(fā)時(shí)機(jī)INSERT|DELETE|UPDATE -指定觸發(fā)器事件ON 表名 -指定所監(jiān)控的表FOR EACH ROW|FOR EACH STATEMENT -指定觸發(fā)器次數(shù)BEGIN 代碼;END;,DML觸發(fā)器,相關(guān)概念 AFTER|BEFORE 在什么事件之前或之后執(zhí)行 INSERT|DELETE|UPDATE 什么事件 ON 表名 觸發(fā)器建在什么表上,即監(jiān)控什么表,AFTER|BEFORE -指定觸發(fā)時(shí)

3、機(jī)INSERT|DELETE|UPDATE -指定觸發(fā)器事件ON 表名 -指定所監(jiān)控的表FOR EACH ROW|FOR EACH STATEMENT -指定觸發(fā)器次數(shù),DML觸發(fā)器,FOR EACH ROW 行級(jí)觸發(fā) 示例:delete from t1,刪除1000行,則執(zhí)行1000次(一行一次) FOR EACH STATEMENT 語(yǔ)句級(jí)觸發(fā) 示例: delete from t1,刪除1000行,則執(zhí)行1次(一句一次) :new 行變量 保存事件發(fā)生時(shí)新數(shù)據(jù)所在行。 只有insert和update才有新數(shù)據(jù)。 :old 行變量 保存事件發(fā)生時(shí)舊數(shù)據(jù)所在行。 只有delete和update

4、才有舊數(shù)據(jù)。,DML觸發(fā)器,示例:指出事件,及事件中的新數(shù)據(jù)和舊數(shù)據(jù) insert into emp(empno,ename) values(51,job); 分析:只有一行新數(shù)據(jù)(51,job),對(duì)應(yīng):new變量。 update emp set ename=oracle where empno = 51; 分析:舊數(shù)據(jù) (51,job) ,對(duì)應(yīng):old變量。 新數(shù)據(jù)(51,oracle),對(duì)應(yīng):new變量。 delete from emp where empno = 51; 分析:只有一行舊數(shù)據(jù)(51,oracle),對(duì)應(yīng) :old變量。,DML觸發(fā)器,案例1: 實(shí)現(xiàn)表t1(t_id,t_n

5、ame)的自動(dòng)編號(hào)。 分析:當(dāng)表t1發(fā)生Insert事件之前自動(dòng)執(zhí)行。添加幾行就執(zhí)行幾次。 知識(shí)點(diǎn):理解觸發(fā)器,使用:new關(guān)鍵字。,CREATE OR REPLACE TRIGGER tr_t1_autoidBEFORE INSERTON t1FOR EACH ROWDECLAREBEGIN SELECT seq_t1_id.NEXTVAL INTO :NEW.t_id FROM dual;END,演示,DML觸發(fā)器,案例2: 更新員工時(shí),工資只能增加,不能減少。 分析:當(dāng)emp發(fā)生update事件時(shí),檢查前后工資,如果變少,則通過(guò)拋出異常中斷更新事件。 知識(shí)點(diǎn):使用:old和:new。,C

6、REATE OR REPLACE TRIGGER tr_emp_update_salBEFORE UPDATEON empFOR EACH ROWDECLAREBEGIN IF(:OLD.sal:NEW.sal)THEN raise_application_error(-20009,老板,工資只能加不能減!); END IF;END;,演示,DML觸發(fā)器,CREATE OR REPLACE TRIGGER tr_emp_update_salBEFORE UPDATE OR DELETEON empFOR EACH ROWDECLAREBEGIN IF updating THEN IF(:OLD

7、.sal:NEW.sal)THEN raise_application_error(-20009,老板,工資只能加不能減!); END IF; END IF; IF deleting THEN IF(:OLD.job=MANAGER)THEN raise_application_error(-20009,不能刪除項(xiàng)目經(jīng)理!); END IF; END IF;END;,DML觸發(fā)器,實(shí)例 案例3:添加員工信息,如果該部門(mén)員工員工人數(shù)超過(guò)3人,則不能再添加。 分析:當(dāng)emp發(fā)生insert事件,檢查新員工所在部門(mén)人數(shù),如果超過(guò)3人,則通過(guò)拋出異常中斷事務(wù)。 知識(shí)點(diǎn):使用條件謂詞,演示,DML觸發(fā)器

8、,實(shí)例 案例4:部門(mén)表的部門(mén)編號(hào)(deptno)更改時(shí),該部門(mén)的員工的部門(mén)編號(hào)也自動(dòng)修改。,CREATE or replace TRIGGER dept_update_cascade AFTER UPDATE OF deptno ON dept FOR EACH ROW BEGIN UPDATE emp SET deptno = :new.deptno WHERE deptno = :old.deptno; END;,注意:經(jīng)常在一個(gè)表變化時(shí),可以在觸發(fā)器中操作相關(guān)的其它表。,調(diào)用: 1、沒(méi)有直接的調(diào)用方式 2、只要dept表的deptno有修改,則“自動(dòng)”執(zhí)行此PL/SQL塊。 3、觸發(fā)器更細(xì)節(jié)的知識(shí)將在后面章節(jié)專(zhuān)門(mén)學(xué)習(xí)。,觸發(fā)器應(yīng)用,使用要點(diǎn) 只要在數(shù)據(jù)修改時(shí)需要自動(dòng)完成一些工作,就可以使用觸發(fā)器。 在大型系統(tǒng)中,更要慎重使用觸發(fā)器。太多觸發(fā)器很容易造成程序難以維護(hù),甚至造成死循環(huán)。 使用場(chǎng)合 控制數(shù)據(jù)安全 實(shí)現(xiàn)數(shù)據(jù)審計(jì) 實(shí)現(xiàn)數(shù)據(jù)完整性 實(shí)現(xiàn)參照完整性,其它觸發(fā)器,INSTEAD OF觸發(fā)器 讓不能更新的視圖(如多表聯(lián)接)能夠完成“更新” 系統(tǒng)事件觸發(fā)器 在系統(tǒng)事件(啟動(dòng),關(guān)閉)時(shí)自動(dòng)執(zhí)行的觸發(fā)器 示例:實(shí)例啟動(dòng)與關(guān)閉 示例:系統(tǒng)登錄及退出 DDL觸發(fā)器 在創(chuàng)建和刪除數(shù)據(jù)庫(kù)對(duì)象執(zhí)行的觸發(fā)器 示例:記

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論