版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 三亞2025年三亞市人力資源和社會(huì)保障局下屬事業(yè)單位招聘(第1號(hào))筆試歷年難易錯(cuò)考點(diǎn)試卷帶答案解析
- 2026年國(guó)家能源投資集團(tuán)有限責(zé)任公司西藏青海新疆高校畢業(yè)生專(zhuān)項(xiàng)招聘(315人)筆試參考題庫(kù)附帶答案詳解
- 2026華電燃?xì)廨啓C(jī)技術(shù)(上海)有限公司校園招聘(第一批)筆試參考題庫(kù)附帶答案詳解
- 2026中國(guó)電科32所校園招聘筆試參考題庫(kù)附帶答案詳解
- 2025陜西核工業(yè)工程勘察院有限公司招聘21人筆試參考題庫(kù)附帶答案詳解
- 2025蒙維公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025江蘇港輝建筑工程有限公司招聘13人筆試參考題庫(kù)附帶答案詳解
- 2025年蕪湖自貿(mào)試驗(yàn)區(qū)建設(shè)投資有限公司招聘5人筆試參考題庫(kù)附帶答案詳解
- 2025年安徽金柱控股集團(tuán)有限公司招聘7人筆試參考題庫(kù)附帶答案詳解
- 廣告推廣務(wù)費(fèi)合同范本
- 離婚協(xié)議標(biāo)準(zhǔn)版(有兩小孩)
- 1輸變電工程施工質(zhì)量驗(yàn)收統(tǒng)一表式(線路工程)-2024年版
- 陜西省建筑場(chǎng)地墓坑探查與處理技術(shù)規(guī)程
- 2022-2023學(xué)年四川省樂(lè)山市市中區(qū)外研版(三起)六年級(jí)上冊(cè)期末測(cè)試英語(yǔ)試卷(含聽(tīng)力音頻)
- 滕州菜煎餅創(chuàng)新創(chuàng)業(yè)計(jì)劃書(shū)
- 2024北京朝陽(yáng)區(qū)初一(上)期末道法試卷及答案
- 假體隆胸后查房課件
- 送貨單格式模板
- GB/T 42430-2023血液、尿液中乙醇、甲醇、正丙醇、丙酮、異丙醇和正丁醇檢驗(yàn)
- 關(guān)于地方儲(chǔ)備糧輪換業(yè)務(wù)會(huì)計(jì)核算處理辦法的探討
- 上海農(nóng)貿(mào)場(chǎng)病媒生物防制工作標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論