第十五章-觸發(fā)器_第1頁
第十五章-觸發(fā)器_第2頁
第十五章-觸發(fā)器_第3頁
第十五章-觸發(fā)器_第4頁
第十五章-觸發(fā)器_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第15章觸發(fā)器知識點回顧了解和使用子程序存儲過程函數(shù)了解和使用程序包2本章目標觸發(fā)器的概念觸發(fā)器類型及創(chuàng)建方法理解和應(yīng)用觸發(fā)器3觸發(fā)器觸發(fā)器是當特定事件出現(xiàn)時自動執(zhí)行的存儲過程特定事件可以是執(zhí)行更新的DML語句和DDL語句觸發(fā)器不能被顯式調(diào)用觸發(fā)器的功能:自動生成數(shù)據(jù)自定義復(fù)雜的安全權(quán)限提供審計和日志記錄啟用復(fù)雜的業(yè)務(wù)邏輯4創(chuàng)建觸發(fā)器的語法CREATE[ORREPLACE]TRIGGERtrigger_nameAFTER|BEFORE|INSTEADOF[INSERT][[OR]UPDATE[OFcolumn_list]][[OR]DELETE]ONtable_or_view_name[REFERENCING{OLD[AS]old/NEW[AS]new}][FOREACHROW][WHEN(condition)]pl/sql_block;5觸發(fā)器的組成部分3-1觸發(fā)器由三部分組成:觸發(fā)器語句(事件)定義激活觸發(fā)器的DML

事件和DDL

事件觸發(fā)器限制執(zhí)行觸發(fā)器的條件,該條件必須為真才能激活觸發(fā)器觸發(fā)器操作(主體)包含一些SQL

語句和代碼,它們在發(fā)出了觸發(fā)器語句且觸發(fā)限制的值為真時運行6觸發(fā)器的組成部分3-2SQL>CREATEORREPLACETRIGGERtrig_sal AFTERUPDATEOFsalONemp

…觸發(fā)器語句為emp表創(chuàng)建

trig_sal觸發(fā)器在更新sal列之后激活觸發(fā)器觸發(fā)器限制SQL> … FOREACHROW WHEN(NEW.sal>OLD.sal) DECLARE Sal_diffNUMBER; … 只有在WHEN子句中的條件得到滿足時,才激活trig_sal觸發(fā)器觸發(fā)器操作SQL>… BEGIN sal_diff:=:NEW.sal-:OLD.sal; DBMS_OUTPUT.PUT_LINE(‘工資差額:’sal_diff); END;如果WHEN子句中的條件得到滿足,將執(zhí)行BEGIN塊中的代碼7觸發(fā)器的組成部分3-3Oracle數(shù)據(jù)庫更新表保存更新激活觸發(fā)器AFTER觸發(fā)器的工作原理BEFORE觸發(fā)器的工作原理更新表激活觸發(fā)器保存更新Oracle數(shù)據(jù)庫8創(chuàng)建觸發(fā)器CREATEORREPLACETRIGGERtrig_stuBEFOREUPDATEOFf_classONmartin.t_studentFOREACHROWWHEN(OLD.f_class=1)BEGIN:NEW.f_class:=1;END;/9觸發(fā)器類型8-1觸發(fā)器的類型有:觸發(fā)器類型INSTEADOF觸發(fā)器DML觸發(fā)器系統(tǒng)觸發(fā)器10觸發(fā)器類型8-211DML觸發(fā)器如果在表或視圖上創(chuàng)建觸發(fā)器,并且觸發(fā)事件由DML語句組成,這種觸發(fā)器稱為DML觸發(fā)器。系統(tǒng)觸發(fā)器如果在方案或數(shù)據(jù)庫上創(chuàng)建觸發(fā)器,則觸發(fā)事件由DDL或數(shù)據(jù)庫操作語句組成,觸發(fā)器稱為系統(tǒng)觸發(fā)器。INSTEADOF觸發(fā)器(1)在非編輯視圖上創(chuàng)建的DML觸發(fā)器。(2)在CREATE語句上定義的系統(tǒng)觸發(fā)器,數(shù)據(jù)庫觸發(fā)INSTEADOF觸發(fā)器而不是運行觸發(fā)語句。觸發(fā)器類型8-3DML行級觸發(fā)器SQL>createtablet_temp(f_idnumber,f_namevarchar2(20));SQL>createsequenceseq_tempid;SQL>createtriggertrig_tempbeforeinsertorupdateoff_idont_tempforeachrowbeginifinsertingthenselectseq_tempid.nextvalinto:New.f_idfromdual;elseRaise_Application_Error(-20020,'不允許更新ID值!');endif;end;/12觸發(fā)器類型8-4DML語句級觸發(fā)器SQL>createorreplacetriggertrig_stuafterinsertordeleteorupdateont_studentbeginifinsertingthendbms_output.put_line('已添加t_student中的數(shù)據(jù)');elsifdeletingthendbms_output.put_line('已刪除t_student中的數(shù)據(jù)');elsifupdatingthendbms_output.put_line('已更新t_student中的數(shù)據(jù)');endif;end;/13觸發(fā)器類型8-5DML觸發(fā)器中的條件謂詞DML觸發(fā)器的觸發(fā)事件可以由多個觸發(fā)語句組成。當其中任一個觸發(fā)語句觸發(fā)觸發(fā)器時,觸發(fā)器可以通過使用這些條件謂詞來確定哪一個。14條件謂詞觸發(fā)語句INSERTINGINSERT語句UPDATINGUPDATE語句UPDATING('column')UPDATE指定列的語句DELETINGDELETE語句觸發(fā)器類型8-6DML中的INSTEADOF觸發(fā)器SQL>CREATEORREPLACETRIGGERupd_ord_viewINSTEADOFUPDATEONord_viewFOREACHROWBEGIN UPDATEorder_masterSETvencode=:NEW.vencode WHEREorderno=:NEW.orderno; DBMS_OUTPUT.PUT_LINE(‘已激活觸發(fā)器');END;/15觸發(fā)器類型8-7DML中的偽記錄在行級別觸發(fā)的觸發(fā)器可以使用相關(guān)名稱訪問正在處理的行中的數(shù)據(jù)。常用的相關(guān)名稱默認為OLD和NEWOLD和NEW也稱為偽記錄(pseudorecord),因為它們具有記錄結(jié)構(gòu)。偽記錄的結(jié)構(gòu)是table_name%ROWTYPE16觸發(fā)語句OLD.field值NEW.field值INSERTNULL插入后的值UPDATE更新前的值更新后的值DELETE刪除前的值NULL觸發(fā)器類型8-8系統(tǒng)觸發(fā)器中的schema觸發(fā)器SQL>createtablet_droppedobj(f_objnamevarchar2(20),f_objtypevarchar2(20),f_dropdatedate);SQL>createorreplacetriggertrig_dropobjafterdroponschemabegininsertintot_droppedobjvalues(Ora_Dict_Obj_Name,Ora_Dict_Obj_Type,Sysdate);end;/17啟用、禁用和刪除觸發(fā)器啟用和禁用觸發(fā)器刪除觸發(fā)器SQL>ALTERTRIGGERtrig_stuDISABLE;SQL>ALTERTRIGGERtrig_stuENABLE;SQL>DROPTRIGGERtrig_stu;18查看有關(guān)觸發(fā)器的信息USER_TRIGGERS數(shù)據(jù)字典視圖包含有關(guān)觸發(fā)器的信息SQL>SELECTTRIGGER_NAMEFROMUSER_TRIGGER

溫馨提示

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

評論

0/150

提交評論