游標(biāo)和觸發(fā)器_第1頁(yè)
游標(biāo)和觸發(fā)器_第2頁(yè)
游標(biāo)和觸發(fā)器_第3頁(yè)
游標(biāo)和觸發(fā)器_第4頁(yè)
游標(biāo)和觸發(fā)器_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、游標(biāo)和觸 發(fā) 器1游標(biāo)簡(jiǎn)介 2-1Oracle 服務(wù)器執(zhí)行 PL/SQL 程序內(nèi)存單元保存到游標(biāo)中一次處理一行檢索行提取行2游標(biāo)簡(jiǎn)介 2-2逐行處理查詢(xún)結(jié)果,以編程的方式訪問(wèn)數(shù)據(jù)游標(biāo)的類(lèi)型:隱式游標(biāo)REF 游標(biāo)顯式游標(biāo)游標(biāo)類(lèi)型 游標(biāo)的屬性有:%FOUND 檢查是否從結(jié)果集中提取到了數(shù)據(jù),提取到返回 TRUE%NOTFOUND 與%FOUND相反%ROWCOUNT 返回到當(dāng)前為止已經(jīng)提取到的實(shí)際行數(shù)%ISOPEN - 游標(biāo)是否打開(kāi),始終為FALSE3游標(biāo)4顯式游標(biāo) 2-1顯式游標(biāo)在 PL/SQL 塊的聲明部分定義查詢(xún),該查詢(xún)可以返回多行顯式游標(biāo)的操作過(guò)程: Declare-Open-Fetch-

2、 -Close數(shù)據(jù)庫(kù)打開(kāi)游標(biāo)30George344Roger245James1Stud_mrksStud_namestud_no提取行變量 關(guān)閉游標(biāo) 空5顯式游標(biāo) 2-2SQLSET SERVER OUTPUT ONSQLDECLARE my_toy_price toys.toyprice%TYPE; CURSOR toy_cur IS SELECT toyprice FROM toys WHERE toyprice250; BEGIN OPEN toy_cur; LOOP FETCH toy_cur INTO my_toy_price; EXIT WHEN toy_cur%NOTFOUND;

3、 DBMS_OUTPUT.PUT_LINE (TOYPRICE=:玩具單價(jià)=:|my_toy_price); END LOOP; CLOSE toy_cur; END;聲明游標(biāo)打開(kāi)游標(biāo)提取行關(guān)閉游標(biāo)6帶參數(shù)的顯式游標(biāo)聲明顯式游標(biāo)時(shí)可以帶參數(shù)以提高靈活性聲明帶參數(shù)的顯式游標(biāo)的語(yǔ)法如下:CURSOR ( ) IS select_statement;SQL SET SERVEROUTPUT ONSQL DECLAREdesig VARCHAR2(20);emp_code VARCHAR2(5);empnm VARCHAR2(20);CURSOR emp_cur(desig VARCHAR2) IS

4、SELECT empno, ename FROM employee WHERE designation=desig; BEGINdesig:= 1000;OPEN emp_cur(desig);LOOPFETCH emp_cur INTO emp_code,empnm;EXIT WHEN emp_cur%NOTFOUND;DBMS_OUTPUT.PUT_LINE(emp_code| |empnm); END LOOP;CLOSE emp_cur; END;7使用顯式游標(biāo)更新行 2-1允許使用游標(biāo)刪除或更新活動(dòng)集中的行聲明游標(biāo)時(shí)必須使用 SELECT FOR UPDATE語(yǔ)句 CURSOR IS

5、 SELECT statement FOR UPDATE;UPDATE SET WHERE CURRENT OF 更新的語(yǔ)法DELETE FROM WHERE CURRENT OF 刪除的語(yǔ)法 8使用顯式游標(biāo)更新行 2-2SQL SET SERVEROUTPUT ONSQL DECLARE new_price NUMBER; CURSOR cur_toy IS SELECT toyprice FROM toys WHERE toyprice100 FOR UPDATE OF toyprice;BEGIN OPEN cur_toy; LOOP FETCH cur_toy INTO new_pri

6、ce; EXIT WHEN cur_toy%NOTFOUND; UPDATE toys SET toyprice = 1.1*new_price WHERE CURRENT OF cur_toy; END LOOP; CLOSE cur_toy; COMMIT;END;9循環(huán)游標(biāo) 2-1循環(huán)游標(biāo)用于簡(jiǎn)化游標(biāo)處理代碼當(dāng)用戶(hù)需要從游標(biāo)中提取所有記錄時(shí)使用循環(huán)游標(biāo)的語(yǔ)法如下:FOR IN LOOPEND LOOP;10循環(huán)游標(biāo) 2-2SQL SET SERVER OUTPUT ONSQL DECLARE CURSOR mytoy_cur IS SELECT toyid, toyname, toypr

7、ice FROM toys; BEGIN FOR toy_rec IN mytoy_cur LOOP DBMS_OUTPUT.PUT_LINE( 玩具編號(hào):| |toy_rec.toyid| |玩具名稱(chēng):| |toy_rec.toyname| |玩具單價(jià):| |toy_rec.toyprice); END LOOP; END;11隱式游標(biāo) 4-1顯式游標(biāo)主要是用于對(duì)查詢(xún)語(yǔ)句的處理,尤其是在查詢(xún)結(jié)果為多條記錄的情況下 而對(duì)于非查詢(xún)語(yǔ)句,如修改、刪除操作,則由ORACLE 系統(tǒng)自動(dòng)地為這些操作設(shè)置游標(biāo)并創(chuàng)建其工作區(qū),這些由系統(tǒng)隱含創(chuàng)建的游標(biāo)稱(chēng)為隱式游標(biāo)隱式游標(biāo)的名字為SQL,這是由ORACLE 系

8、統(tǒng)定義的。對(duì)于隱式游標(biāo)的操作,如定義、打開(kāi)、取值及關(guān)閉操作,都由ORACLE 系統(tǒng)自動(dòng)地完成,無(wú)需用戶(hù)進(jìn)行處理。 格式調(diào)用為: SQL%注:INSERT, UPDATE, DELETE, SELECT 語(yǔ)句中不必明確定義游標(biāo) SQL%FOUND 布爾型屬性,當(dāng)最近一次讀記錄時(shí)成功返回,則值為true; SQL%NOTFOUND 布爾型屬性,與%found相反; SQL %ROWCOUNT 數(shù)字型屬性, 返回已從游標(biāo)中讀取得記錄數(shù); SQL %ISOPEN 布爾型屬性, 取值總是FALSE。SQL命令執(zhí)行完畢立即關(guān)閉隱式游標(biāo)。12隱式游標(biāo) 4-2SQL SET SERVEROUTPUT ONSQ

9、L BEGINUPDATE toys SET toyprice=270WHERE toyid= P005;IF SQL%FOUND THENDBMS_OUTPUT.PUT_LINE(表已更新);END IF; END;/只有在 DML 語(yǔ)句影響一行或多行時(shí),才返回 True13隱式游標(biāo) 4-3SQL SET SERVEROUTPUT ONSQL DECLARE v_TOYID TOYS.ID%type := &TOYID; v_TOYNAME TOYS.NAME%Type := &TOYNAME; BEGIN UPDATE TOYS SET NAME = v_TOYNAME WHERE toy

10、id=v_TOYID; IF SQL%NOTFOUND THEN DBMS_OUTPUT.PUT_LINE(編號(hào)未找到。); ELSEDBMS_OUTPUT.PUT_LINE(表已更新);END IF; END;/如果 DML 語(yǔ)句不影響任何行,則返回 True 14隱式游標(biāo) 4-4SQL SET SERVEROUTPUT ON SQL BEGINUPDATE vendor_masterSET venname= Rob MathewWHERE vencode=V004;DBMS_OUTPUT.PUT_LINE (SQL%ROWCOUNT); END; /返回 DML 語(yǔ)句影響的行數(shù)15SELE

11、CT INTO 語(yǔ)句 2-1SQL SET SERVEROUTPUT ONSQL DECLARE empid VARCHAR2(10);desig VARCHAR2(10); BEGINempid:= &Employeeid;SELECT designation INTO desig FROM employee WHERE empno=empid; EXCEPTIONWHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(職員未找到); END; /如果沒(méi)有與SELECT INTO語(yǔ)句中的條件匹配的行,將引發(fā)NO_DATA_FOUND異常16SELECT IN

12、TO 語(yǔ)句 2-2SQL SET SERVEROUTPUT ONSQL DECLARE empid VARCHAR2(10); BEGINSELECT empno INTO empid FROM employee; EXCEPTIONWHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE(該查詢(xún)提取多行); END; /如果 SELECT INTO 語(yǔ)句返回多個(gè)值,將引發(fā)TOO_MANY_ROWS異常17REF游標(biāo)應(yīng)用:過(guò)程返回結(jié)果集由于oracle存儲(chǔ)過(guò)程沒(méi)有返回值,它的所有返回值都是通過(guò)out參數(shù)來(lái)替代的,列表同樣也不例外,但由于是集合,所以不能用一般的參

13、數(shù),必須要用pagkage了.所以要分兩部分,1, 建一個(gè)程序包。如下:CREATE OR REPLACE PACKAGE TESTPACKAGE AS TYPE Test_CURSOR IS REF CURSOR;end TESTPACKAGE;2,建立存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程為:CREATE OR REPLACE PROCEDURE TESTC(p_CURSOR out TESTPACKAGE.Test_CURSOR) IS BEGIN OPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB;END TESTC;可以看到,它是把游標(biāo)(可以理解為一個(gè)指針),作為一個(gè)o

14、ut 參數(shù)來(lái)返回值的。18練 習(xí)編寫(xiě)游標(biāo)打印出emp表中的職員編號(hào)、姓名、上級(jí)編號(hào)、工資要求職員編號(hào)和上級(jí)編號(hào)都為偶數(shù)只打印其中的五條記錄注意考慮游標(biāo)不足五條記錄的情況19觸發(fā)器14.1 概述 14.2 語(yǔ)句觸發(fā)器 14.3 行觸發(fā)器 14.4 instead of觸發(fā)器 14.5 系統(tǒng)事件觸發(fā)器 14.6 用戶(hù)事件觸發(fā)器 14.7 禁用觸發(fā)器和事務(wù)處理 14.8 查看觸發(fā)器信息 14.9 事件屬性函數(shù) 2014.1 概述觸發(fā)器是當(dāng)特定事件出現(xiàn)時(shí)自動(dòng)執(zhí)行的存儲(chǔ)過(guò)程特定事件可以是執(zhí)行更新的DML語(yǔ)句和DDL語(yǔ)句觸發(fā)器不能被顯式調(diào)用使用觸發(fā)器可以完成的功能如下:允許或限制對(duì)表的修改;自動(dòng)生成派生列

15、;強(qiáng)制數(shù)據(jù)一致性;提供審計(jì)和日志記錄;防止無(wú)效的事務(wù)處理;啟用復(fù)雜的業(yè)務(wù)邏輯。在Oracle系統(tǒng)中,觸發(fā)器有4個(gè)組成部分,即觸發(fā)器名稱(chēng)、觸發(fā)語(yǔ)句、觸發(fā)器限制和觸發(fā)操作。下面詳細(xì)介紹這些組成部分。21例子-觸發(fā)器create or replace trigger tri_emp_empnobefore insert or update -insert or update 意思是指insert 或update語(yǔ)句執(zhí)行時(shí)就觸發(fā)on emp -觸發(fā)器依賴(lài)的表for each row -行觸發(fā)器begin :m:=0; end;-測(cè)試select * from emp;update emp set sa

16、l=1301 where empno=7934;update emp set sal=sal*1.01; 22觸發(fā)器名稱(chēng) 觸發(fā)器名稱(chēng)就是觸發(fā)器的名稱(chēng)。數(shù)據(jù)庫(kù)中的每一個(gè)對(duì)象都有名稱(chēng),觸發(fā)器對(duì)象也不例外。一般應(yīng)該采用描述性名稱(chēng)來(lái)定義觸發(fā)器名稱(chēng)。在觸發(fā)器名稱(chēng)中,應(yīng)該包括觸發(fā)器執(zhí)行的時(shí)間、執(zhí)行的操作、涉及的表和列等。下面是一個(gè)定義觸發(fā)器部分語(yǔ)句的示例:create trigger trigger_emp_empno23觸發(fā)語(yǔ)句 觸發(fā)語(yǔ)句就是那些導(dǎo)致Oracle執(zhí)行觸發(fā)器的事件。觸發(fā)器事件可以是下面的內(nèi)容:表和一些視圖上的數(shù)據(jù)操縱語(yǔ)言語(yǔ)句,例如insert、update、delete;模式對(duì)象上的數(shù)據(jù)定

17、義語(yǔ)言語(yǔ)句,例如create、alter、drop;數(shù)據(jù)庫(kù)的啟動(dòng)和關(guān)閉;系統(tǒng)錯(cuò)誤;各種系統(tǒng)活動(dòng)。24觸發(fā)器限制 即使導(dǎo)致觸發(fā)器激活的事件發(fā)生了,但是也不意味著Oracle就會(huì)執(zhí)行它。激活事件發(fā)生之后,觸發(fā)器首先判斷在觸發(fā)器上是否存在限制,然后才會(huì)在執(zhí)行觸發(fā)器之間評(píng)估所有的限制。某個(gè)限制條件可能如下:when(new_value.empno7782)25觸發(fā)操作 觸發(fā)操作是觸發(fā)器的主體。當(dāng)發(fā)生如下兩件事情時(shí)Oracle才會(huì)執(zhí)行代碼塊:使用了合適的語(yǔ)句;如果提供了觸發(fā)器限制,則評(píng)估為真。26觸發(fā)器的類(lèi)型 Oracle系統(tǒng)有5種類(lèi)型的觸發(fā)器。每一種類(lèi)型的觸發(fā)器都可以完成不同的任務(wù)。這5種類(lèi)型的觸發(fā)器

18、分別是:語(yǔ)句觸發(fā)器、行觸發(fā)器、instead of觸發(fā)器、系統(tǒng)事件觸發(fā)器和用戶(hù)事件觸發(fā)器。觸發(fā)器類(lèi)型用戶(hù)事件觸發(fā)器DML觸發(fā)器系統(tǒng)事件觸發(fā)器語(yǔ)句級(jí)觸發(fā)器行級(jí)觸發(fā)器INSTEAD OF觸發(fā)器2714.2 語(yǔ)句觸發(fā)器語(yǔ)句觸發(fā)器是在表上或某些視圖上執(zhí)行的特定語(yǔ)句的觸發(fā)器。語(yǔ)句觸發(fā)器能夠與insert、update或delete語(yǔ)句或這些語(yǔ)句的任意組合關(guān)聯(lián)。用戶(hù)既可以在表的insert或update語(yǔ)句上使用單獨(dú)的觸發(fā)器,也可以在表的insert和update語(yǔ)句的組合上使用觸發(fā)器,甚至可以在單獨(dú)的表上擁有多個(gè)insert語(yǔ)句觸發(fā)器。28創(chuàng)建語(yǔ)句觸發(fā)器 用戶(hù)可能希望在表上創(chuàng)建進(jìn)行安全檢查的insert

19、、update或delete語(yǔ)句觸發(fā)器,以便根據(jù)用戶(hù)的具體業(yè)務(wù)規(guī)則驗(yàn)證正在進(jìn)行操作的用戶(hù)是否具有指定的權(quán)限。這種類(lèi)型的簡(jiǎn)單觸發(fā)器如圖14-1所示。29級(jí)聯(lián)觸發(fā)器 這里需要考慮的是級(jí)聯(lián)觸發(fā)器的概念。這個(gè)概念意味著用戶(hù)觸發(fā)器的操作將會(huì)導(dǎo)致另一個(gè)觸發(fā)器激活,以此類(lèi)推。如果用戶(hù)有3個(gè)表A、B和C。在表A上有一個(gè)insert觸發(fā)器,它會(huì)向表B中插入一行。而在表B上有一個(gè)向表C插入一行的觸發(fā)器,那么這就是級(jí)聯(lián)觸發(fā)器。在開(kāi)發(fā)應(yīng)用程序時(shí),一定要注意這種現(xiàn)象,因?yàn)檫@種級(jí)聯(lián)可能會(huì)對(duì)性能產(chǎn)生影響,甚至可能帶來(lái)不可預(yù)料的后果。30修改觸發(fā)器 可以使用create or replace命令更新或改變觸發(fā)器。該命令可以改

20、變觸發(fā)器的主體、限制子句等。也可以從根本上重新定義觸發(fā)器。如果需要,可以使用create or replace命令處理某個(gè)觸發(fā)器,將其從foo表上的insert類(lèi)型觸發(fā)器改變?yōu)閎ar表上的update觸發(fā)器。為了從數(shù)據(jù)庫(kù)中刪除觸發(fā)器,可以使用drop trigger 命令。31確定哪個(gè)語(yǔ)句起作用 在很多情況下,需要知道哪個(gè)語(yǔ)句導(dǎo)致了觸發(fā)器被激活。如果只在一種類(lèi)型的語(yǔ)句上建立觸發(fā)器,那么這是一件非常簡(jiǎn)單的事情。但是,如果創(chuàng)建了一個(gè)觸發(fā)器,但是該觸發(fā)器針對(duì)多種類(lèi)型的語(yǔ)句,那么想要知道是哪個(gè)語(yǔ)句導(dǎo)致了觸發(fā)器的激活,這好像是很難的事情。實(shí)際上,這也很簡(jiǎn)單,用戶(hù)可以詢(xún)問(wèn)Oracle是哪一個(gè)語(yǔ)句導(dǎo)致了觸發(fā)

21、器被激活。所需的事情就是引用inserting、updating或deleting條件謂詞,引用方式如下。如果值為真,那么就是相應(yīng)的語(yǔ)句類(lèi)型初始化了觸發(fā)器。32before和after 通過(guò)前面的示例可以看到,語(yǔ)句觸發(fā)器能夠在語(yǔ)句執(zhí)行前(before)被激活,這使得它非常適合于強(qiáng)化安全、啟用業(yè)務(wù)規(guī)則、進(jìn)行日志操作等。能否建立after語(yǔ)句觸發(fā)器嗎?回答是肯定的。在after語(yǔ)句觸發(fā)器中,Oracle會(huì)在語(yǔ)句完成之后執(zhí)行它們,而不是在語(yǔ)句執(zhí)行前執(zhí)行它們。Before和after觸發(fā)在語(yǔ)句觸發(fā)器中使用起來(lái)沒(méi)區(qū)別3314.3 行觸發(fā)器用戶(hù)不僅可以建立為表上各個(gè)insert或update或delete

22、語(yǔ)句激活的觸發(fā)器,而且還可以定義受到影響的各行激活的觸發(fā)器。這些觸發(fā)器稱(chēng)為行觸發(fā)器。行觸發(fā)器的定義方式與語(yǔ)句觸發(fā)器類(lèi)似,但是有以下兩個(gè)例外:(1) 行觸發(fā)器要在觸發(fā)器定義的觸發(fā)語(yǔ)句中包含for each row子句,還可以包含referencing子句。(2) 在beforefor each row觸發(fā)器中,可以引用受到影響的行值,甚至可以在觸發(fā)器中設(shè)置這些值。在行級(jí)觸發(fā)器中的區(qū)別在于,after的觸發(fā)器不能對(duì):new的值進(jìn)行更新34行觸發(fā)器的作用行觸發(fā)器的作用主要是可以使觸發(fā)器的編寫(xiě)人員有能力為主鍵提供默認(rèn)設(shè)置,并且還可以格式化輸入表中的數(shù)據(jù)??梢栽?new_value列值上應(yīng)用initca

23、p()、substr()、upper()、lower()等函數(shù),因此可以格式化數(shù)據(jù),確保數(shù)據(jù)的一致性。這樣使得在查詢(xún)中選擇數(shù)據(jù)或建立約束變得更容易。如果可以確保數(shù)據(jù)采用了特定的格式,那么就可以在where子句中建立更簡(jiǎn)單的謂詞。35簡(jiǎn)單的行觸發(fā)器-簡(jiǎn)單的行觸發(fā)器create or replace trigger trigger_person_insert_updatebefore inserton personfor each row -行觸發(fā)器begin select count(*)+1 into :new.PersonID from person;end;-測(cè)試insert into p

24、erson(PersonName) values(rkk);insert into person(PersonID,PersonName) values(16,aaa);select * from person36復(fù)雜點(diǎn)的行觸發(fā)器-復(fù)雜點(diǎn)的行觸發(fā)器-beforecreate or replace trigger tr_emp_salbefore update of sal -更新sal列才觸發(fā)on empfor each rowbegin if :new.sal:old.sal then raise_application_error(-20010,工資只允許升不許降!); end if;en

25、d;3714.4 instead of觸發(fā)器instead of觸發(fā)器是Oracle系統(tǒng)用來(lái)替換所使用的實(shí)際語(yǔ)句而執(zhí)行的觸發(fā)器,與導(dǎo)致觸發(fā)器激活的語(yǔ)句執(zhí)行之前或執(zhí)行之后執(zhí)行的語(yǔ)句觸發(fā)器和行觸發(fā)器不同。例如,如果在視圖上執(zhí)行insert操作的用戶(hù),且該視圖上有instead of插入觸發(fā)器,那么Oracle系統(tǒng)就不會(huì)執(zhí)行用戶(hù)的觸發(fā)器。然后,用戶(hù)的觸發(fā)器就可以執(zhí)行編碼所要執(zhí)行的所有操作。它可以向基本表或另外的表中插入用戶(hù)數(shù)據(jù),還可以對(duì)用戶(hù)試圖插入數(shù)據(jù)的事實(shí)進(jìn)行日志記錄,還可以從完全沒(méi)有關(guān)系的表中刪除數(shù)據(jù)。當(dāng)然,這些操作都依賴(lài)于用戶(hù)的編碼。另外,需要使用instead of觸發(fā)器的地方是修改對(duì)象視圖

26、、嵌套表,以及其他使用了distinct、group by、connect by、start with等子句和count、sum等合計(jì)函數(shù)的地方。在定義instead of觸發(fā)器時(shí)注意,這里沒(méi)有before instead of觸發(fā)器和after instead of觸發(fā)器。這是因?yàn)閕nstead of觸發(fā)器總是等同于after行觸發(fā)器。instead of觸發(fā)器會(huì)為每個(gè)受影響的行激活一次,用戶(hù)不能修改它們的:new值。用于用戶(hù)不能直接使用 DML 語(yǔ)句修改的視圖INSTEAD OF 觸發(fā)器38instead of觸發(fā)器-創(chuàng)建視圖create view emp_dept asselect em

27、p.*,dept.dname,dept.loc from empinner join dept on emp.deptno=dept.deptnoselect * from emp_dept-更新視圖update emp_dept set ename=aa where empno=7369 -失敗-創(chuàng)建instead of 觸發(fā)器create or replace trigger emp_dept_triggerinstead of updateon emp_dept -視圖begin update emp set ename=:new.ename where empno=:old.empno

28、;end;update emp_dept set ename=aa where empno=7369 再次更新,成功3914.5 系統(tǒng)事件觸發(fā)器Oracle系統(tǒng)還允許開(kāi)發(fā)人員建立與特定系統(tǒng)事件相關(guān)的觸發(fā)器。這些特定事件如下:數(shù)據(jù)庫(kù)啟動(dòng);數(shù)據(jù)庫(kù)關(guān)閉;服務(wù)器錯(cuò)誤等。這些事件都是實(shí)例范圍的。這些觸發(fā)器不像前面介紹的那些觸發(fā)器那樣與特定的表或視圖關(guān)聯(lián)。 4014.6 用戶(hù)事件觸發(fā)器用戶(hù)事件觸發(fā)器也稱(chēng)為客戶(hù)觸發(fā)器,是能夠與insert、update、delete以外的用戶(hù)登錄、注銷(xiāo)、DML、DDL操作事件相關(guān)聯(lián)的觸發(fā)器。這些用戶(hù)事件包括了下面的語(yǔ)句和命令的before和after觸發(fā)器:createal

29、terdropanalyzeassociate statisticsdisassociate statisticsauditnoauditcommentgrantrevokerenametruncate下面事件只有before觸發(fā)器logoff下面事件只有after觸發(fā)器suspend41觸發(fā)器總結(jié)執(zhí)行 非insert delete update 語(yǔ)句時(shí)執(zhí)行在發(fā)生打開(kāi)、關(guān)閉、登錄和退出數(shù)據(jù)庫(kù)等系統(tǒng)事件時(shí)執(zhí)行執(zhí)行DML語(yǔ)句時(shí)執(zhí)行無(wú)論受影響的行數(shù)是多少,都只執(zhí)行一次對(duì)DML語(yǔ)句修改的每個(gè)行執(zhí)行一次用于用戶(hù)不能直接使用 DML 語(yǔ)句修改的視圖或其他表用戶(hù)事件觸發(fā)器系統(tǒng)事件級(jí)觸發(fā)器DML 觸發(fā)器語(yǔ)句級(jí)

30、觸發(fā)器行級(jí)觸發(fā)器INSTEAD OF 觸發(fā)器4214.7 禁用觸發(fā)器和事務(wù)處理到目前為止已經(jīng)介紹了怎樣使用create、create or replace和drop語(yǔ)句來(lái)執(zhí)行與觸發(fā)器有關(guān)的操作。如果希望改變觸發(fā)器的主體,那么可以使用create or replace語(yǔ)句。如果需要?jiǎng)h除今后不再使用的觸發(fā)器,那么可以使用drop語(yǔ)句。如果需要臨時(shí)禁用觸發(fā)器,那么可以使用alter語(yǔ)句,語(yǔ)法格式如下:alter trigger disable;alter trigger enable; -激活A(yù)lter table emp disable all triggers; -禁用emp表所有觸發(fā)器Alter table emp enable all triggers; -激活所有觸發(fā)器43事務(wù)處理有關(guān)事務(wù)處理

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論