第12章 -過程、函數(shù)、包和觸發(fā)器型2_第1頁
第12章 -過程、函數(shù)、包和觸發(fā)器型2_第2頁
第12章 -過程、函數(shù)、包和觸發(fā)器型2_第3頁
第12章 -過程、函數(shù)、包和觸發(fā)器型2_第4頁
第12章 -過程、函數(shù)、包和觸發(fā)器型2_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)庫開發(fā)技術(shù)數(shù)據(jù)庫開發(fā)技術(shù)第12章 使用子程序和包 2數(shù)據(jù)庫開發(fā)技術(shù)FJUT 理解子程序(過程、函數(shù))及包的概念 掌握如何創(chuàng)建、執(zhí)行和刪除過程、函數(shù)及包的方法 了解形參和實參的區(qū)別以及不同參數(shù)模式的特征 靈活使用過程、函數(shù)及包書寫PL/SQL程序 掌握創(chuàng)建和測試DML觸發(fā)器、instead-of數(shù)據(jù)庫觸發(fā)器以及系統(tǒng)觸發(fā)器 了解數(shù)據(jù)庫觸發(fā)器的使用時機和限制本章要點數(shù)據(jù)庫開發(fā)技術(shù)FJUT 掌握存儲子程序與數(shù)據(jù)字典的交互方式及如何從SQL語句中調(diào)用存儲子程序 了解存儲子程序和局部子程序的區(qū)別 掌握存儲子程序在Oracle8i和Oracle9i中的新特性。本章要點數(shù)據(jù)庫開發(fā)技術(shù)FJUT子程序位置子程

2、序和包可以存儲在數(shù)據(jù)字典中(子程序是用命令CREATE OR REPLACE創(chuàng)建)可以從其他PL/SQL語句塊中調(diào)用已創(chuàng)建的子程序。子程序可以在語句塊的聲明段定義,以這種方式定義的子程序叫做局部子程序。包則必須存儲在數(shù)據(jù)字典中,而不能是局部的。數(shù)據(jù)庫開發(fā)技術(shù)FJUT存儲子程序和數(shù)據(jù)字典 當使用命令CREATE OR REPLACE創(chuàng)建子程序時,該子程序就被存儲在數(shù)據(jù)字典中。存儲子程序的信息可以通過各種數(shù)據(jù)字典視圖來訪問。數(shù)據(jù)庫開發(fā)技術(shù)FJUT局部子程序局部子程序: 是一個在PL/SQL語句塊的聲明段中聲明的子程序。子函數(shù)只在其聲明的語句塊中可見,其作用域從聲明點開始到該語句塊結(jié)束為止。其他語句

3、塊不能調(diào)用該函數(shù),因為該函數(shù)對其他語句塊來說是不可見的。數(shù)據(jù)庫開發(fā)技術(shù)FJUT局部子程序(續(xù))局部子程序也可以聲明為存儲子程序聲明段的一部分局部子程序的位置:任何局部子程序都必須在聲明段的最后進行聲明預先聲明 :局部PL/SQL子程序的名稱是標識符,必須在被引用前聲明。局部子程序也可以重載數(shù)據(jù)庫開發(fā)技術(shù)FJUT存儲子程序和局部子程序的比較存儲子程序局部子程序該類子程序以編譯后生成的偽代碼形式p-code存儲在數(shù)據(jù)庫中。當調(diào)用該類子程序時,不需進行編譯即可運行局部子程序被編譯為包含它的語句塊的一部分。如果其所在語句塊是匿名塊并需要多次運行時,則該子程序就必須每次進行編譯存儲子程序可以從對該子程序

4、具有EXECUTE特權(quán)的用戶所提交的任何語句塊中調(diào)用局部子程序只能從包含子程序的語句塊中調(diào)用由于存儲子程序與調(diào)用塊的相互隔離,調(diào)用塊具有代碼少,易于理解的特點。除此之外,子程序和調(diào)用塊還可以分開維護局部子程序和調(diào)用塊同處于一個塊內(nèi),所以容易引起混淆。如果修改了調(diào)用塊的話,則該塊調(diào)用的子程序作為所屬塊的一部分也要重新編譯可以使用DBMS_SHARED_POOL.KEEP包過程來把編譯后p-code代碼存儲在共享池中。這種方式可以改善程序性能局部子程序自身不能存儲在共享池中獨立的存儲子程序不能進行重載,但同一包內(nèi)的子程序可以重載同一塊中的局部子程序可以重載數(shù)據(jù)庫開發(fā)技術(shù)FJUT子程序的依賴性 依賴

5、:數(shù)據(jù)字典記錄了存儲過程或函數(shù)所引用的所有Oracle對象。該過程或函數(shù)就依賴于這些存儲的對象。自動重編譯:如果一個依賴對象失效,PL/SQL引擎將在該對象再次被調(diào)用時對其重新進行編譯。 包的依賴性:包體的變化不會導致修改包頭。因此,其他依賴于該包頭的對象也不需要進行重新編譯。如果該包頭有變化,則會使包體自動失效,這是因為該包體依賴于包頭 。如何確定無效 :通過數(shù)據(jù)字典在不斷地跟蹤對象間依賴性數(shù)據(jù)庫開發(fā)技術(shù)FJUT包運行時狀態(tài)當?shù)谝淮螌嵗粋€包時,將從磁盤中讀入該包的偽代碼并將其放入系統(tǒng)全局工作區(qū)SGA的共享池中。包的運行時狀態(tài),即打包的變量和游標,則存放在用戶全局區(qū)(UGA)的會話存儲區(qū)中

6、。這就保證了每個會話都將有其運行時狀態(tài)的副本。數(shù)據(jù)庫開發(fā)技術(shù)FJUTEXECUTE特權(quán) 為了能夠?qū)Ρ磉M行訪問,必須使用SELECT,INSERT,UPDATE和DELETE對象特權(quán)。GRANT語句把這些特權(quán)賦予數(shù)據(jù)庫用戶或角色。對于存儲子程序和包來說,相關(guān)的特權(quán)是EXECUTE。 數(shù)據(jù)庫開發(fā)技術(shù)FJUT默認參數(shù)從過程化語句中調(diào)用一個函數(shù)時,如果該函數(shù)有形參的話,可以使用其缺省值。然而,如果從SQL語句調(diào)用函數(shù)時,必須指定所有參數(shù)。必須使用位置對應法(Positinal Notation),而不能使用名稱對應法(Name Notation)。 數(shù)據(jù)庫開發(fā)技術(shù)FJUTOracle8i中從SQL語句

7、調(diào)用函數(shù)從Oracle8i起,從DML語句中調(diào)用的函數(shù)既不可以從正在被該DML語句修改的數(shù)據(jù)庫表讀取數(shù)據(jù),也不能對其進行修改,但該函數(shù)可以更新其他表。 數(shù)據(jù)庫開發(fā)技術(shù)FJUT小結(jié) 通過訪問各種數(shù)據(jù)庫字典視圖來查詢子程序的信息。user_objects視圖包含了當前用戶擁有的所有對象的信息。user_source視圖包含對象的源程序代碼。user_errors視圖則包含編譯錯誤的信息。 預先聲明可以解決函數(shù)之間相互調(diào)用的問題。 子程序引用其他數(shù)據(jù)庫對象時,該子程序依賴于那個對象。如果修改了被引用對象,那么依賴對象的狀態(tài)將更改為無效,指出需要重新編譯。數(shù)據(jù)庫開發(fā)技術(shù)FJUT 本章要點理解數(shù)據(jù)庫觸發(fā)

8、器、變異表和約束表的概念及數(shù)理解數(shù)據(jù)庫觸發(fā)器、變異表和約束表的概念及數(shù)據(jù)庫觸發(fā)器的語法據(jù)庫觸發(fā)器的語法掌握如何在掌握如何在SQLSQL* *PLUSPLUS中創(chuàng)建和測試中創(chuàng)建和測試DMLDML觸發(fā)觸發(fā)器、器、instead-ofinstead-of數(shù)據(jù)庫觸發(fā)器以及系統(tǒng)觸發(fā)器數(shù)據(jù)庫觸發(fā)器以及系統(tǒng)觸發(fā)器了解數(shù)據(jù)庫觸發(fā)器的使用時機和限制。了解數(shù)據(jù)庫觸發(fā)器的使用時機和限制。數(shù)據(jù)庫開發(fā)技術(shù)FJUT觸發(fā)器的概念作為數(shù)據(jù)庫對象的觸發(fā)器是一個與表相關(guān)聯(lián)的被存儲的PL/SQL程序。每當一個特定的數(shù)據(jù)操作語句在指定的表上發(fā)生時,就會引發(fā)觸發(fā)器的執(zhí)行。 與存儲子程序的調(diào)用方式不同,觸發(fā)器的執(zhí)行是采用觸發(fā)機制數(shù)據(jù)庫開

9、發(fā)技術(shù)FJUT觸發(fā)器的定義和使用觸發(fā)器是當特定事件出現(xiàn)時自動執(zhí)行的存儲過程特定事件可以是執(zhí)行更新的DML語句和DDL語句觸發(fā)器不能被顯式調(diào)用觸發(fā)器的功能:自動生成數(shù)據(jù)自定義復雜的安全權(quán)限提供審計和日志記錄啟用復雜的業(yè)務邏輯數(shù)據(jù)庫開發(fā)技術(shù)FJUT觸發(fā)器的類型 觸發(fā)器主要有三種類型:DMLINSTEAD-OF觸發(fā)器系統(tǒng)觸發(fā)器。觸發(fā)器的應用,主要用于:維護那些通過創(chuàng)建表時的聲明約束無法實現(xiàn)的復雜的完整性約束。通過記錄已進行的改變以及是誰進行了該項改變來檢查一個表中的信息。當一個表發(fā)生改變時,自動向其他程序發(fā)送需要采取行動的信號。在一個發(fā)布-預訂環(huán)境中發(fā)布有關(guān)各種事件的信息。 數(shù)據(jù)庫開發(fā)技術(shù)FJUTD

10、ML觸發(fā)器 DML觸發(fā)器可以由DML語句激發(fā)由DML語句的類型決定DML觸發(fā)器的類型。DML觸發(fā)器可以在DML語句操作之前或之后激發(fā)。DML觸發(fā)器也可以在行或語句操作上激發(fā) 。數(shù)據(jù)庫開發(fā)技術(shù)FJUTINSTEAD-OF觸發(fā)器 INSTEAD-OF 觸發(fā)器是行級別的, 執(zhí)行時,激發(fā)它的DML語句不執(zhí)行。 只能定義在視圖上(可以是關(guān)系型或是對象)。 Oracle8及更高版本才提供。數(shù)據(jù)庫開發(fā)技術(shù)FJUT系統(tǒng)觸發(fā)器 系統(tǒng)觸發(fā)器在發(fā)生諸如數(shù)據(jù)庫啟動或關(guān)閉等系統(tǒng)事件時激發(fā),而不是在執(zhí)行DML語句時激發(fā)。系統(tǒng)觸發(fā)器也可以在DDL操作時,如表的創(chuàng)建時被激發(fā)。 數(shù)據(jù)庫開發(fā)技術(shù)FJUT創(chuàng)建觸發(fā)器 CREATE

11、OR REPLACE TRIGGER trigger_nameBEFORE | AFTER | INSTEAD OF triggering_eventreferencing_clauseWHEN trigger_conditionFOR EACH ROWtrigger_body;數(shù)據(jù)庫開發(fā)技術(shù)FJUTCreate trigger emp_t Before insert or update or delete On empBegin If to_char(sysdate,dy)=星期日星期日 thenRaise_application_error(-20000,today is holiday!

12、); End if; End; 當執(zhí)行一條刪除語句在星期六對當執(zhí)行一條刪除語句在星期六對emp表進行刪除操作時:表進行刪除操作時:Delete from emp where eno=eo1; 那么將會刪除成功那么將會刪除成功,如果是在星期日執(zhí)行這條語句,則觸發(fā)器的異常導致本應繼,如果是在星期日執(zhí)行這條語句,則觸發(fā)器的異常導致本應繼續(xù)執(zhí)行的觸發(fā)語句不再執(zhí)行,刪除未成功。續(xù)執(zhí)行的觸發(fā)語句不再執(zhí)行,刪除未成功。創(chuàng)建觸發(fā)器 數(shù)據(jù)庫開發(fā)技術(shù)FJUTAFTER 子句AFTER:表示觸發(fā)語句正常執(zhí)行后,觸發(fā)器被觸發(fā)。注意:雖然觸發(fā)器是在觸發(fā)語句之后觸發(fā),但是如果觸發(fā)器代碼出現(xiàn)異常時,在此之前執(zhí)行的觸發(fā)語句無

13、效。數(shù)據(jù)庫開發(fā)技術(shù)FJUTCreate or replace trigger emp_testAfter delete On empBegin Raise_application_error(-20000,test message !);End;當執(zhí)行一條語句對emp表中的數(shù)據(jù)進行刪除時,Delete from emp where empno=7369;該語句執(zhí)行完后,觸發(fā)器被觸發(fā),但觸發(fā)器拋出一個異常,所以已執(zhí)行的刪除語句無效,實際上并沒有刪除7369職工記錄。AFTER 子句數(shù)據(jù)庫開發(fā)技術(shù)FJUT觸發(fā)語句和觸發(fā)器的相互影響系統(tǒng)是將觸發(fā)語句和觸發(fā)器的執(zhí)行作為一個整體來看待的。無論是BEFOR

14、E還是AFTER觸發(fā)器,觸發(fā)器有異常,觸發(fā)語句都會撤消;而觸發(fā)語句出現(xiàn)異常,觸發(fā)器的工作也會撤消。例:Create or replace trigger emp_t1Before insert or update or delete On empBegin Insert into temp values(insert emp! );End;/數(shù)據(jù)庫開發(fā)技術(shù)FJUT當執(zhí)行一條插入語句時:Insert into emp(empno) values(7369); 如果發(fā)生主碼重復,插入語句錯誤時查看temp表為空,觸發(fā)器所做的工作被撤消。如果插入合法的話,再查看temp表,則有一行“insert e

15、mp!”觸發(fā)語句和觸發(fā)器的相互影響數(shù)據(jù)庫開發(fā)技術(shù)FJUTINSTEAD OF 子句INSTEAD OF:表示不執(zhí)行觸發(fā)語句,而是執(zhí)行觸發(fā)器代碼。相當于用觸發(fā)器代碼替代了觸發(fā)語句所做的工作。注意:該子句僅用于建立視圖上的觸發(fā)器,而且默認為行觸發(fā)器。例:編寫一個觸發(fā)器emp_view_t,其功能是禁止對emp_view 視圖進行所有的操作,并輸出有關(guān)提示信息。數(shù)據(jù)庫開發(fā)技術(shù)FJUT假設(shè)視圖定義如下:Create view emp_view asSelect * from emp;觸發(fā)器代碼如下:Create or replace trigger emp_view_tInstead of inser

16、t or update or delete On emp_viewBegin Insert into temp values(emp_view視圖不能修改);End;INSTEAD OF 子句數(shù)據(jù)庫開發(fā)技術(shù)FJUT啟用及禁用觸發(fā)器和刪除觸發(fā)器禁用觸發(fā)器:Alter trigger emp_t disable;啟用觸發(fā)器:Alter trigger emp_t enable;刪除觸發(fā)器:Drop trigger emp_t; l對數(shù)據(jù)庫數(shù)據(jù)管理,例如大量數(shù)據(jù)的導入導出對數(shù)據(jù)庫數(shù)據(jù)管理,例如大量數(shù)據(jù)的導入導出時候,一般需要禁止某些觸發(fā)器,以增加效率時候,一般需要禁止某些觸發(fā)器,以增加效率。數(shù)據(jù)庫開

17、發(fā)技術(shù)FJUTFOR EACH ROW子句該子句定義觸發(fā)器為“行級觸發(fā)器”,而沒有指定該子句的觸發(fā)器是一個“語句級的觸發(fā)器”數(shù)據(jù)庫開發(fā)技術(shù)FJUT創(chuàng)建DML觸發(fā)器 數(shù)據(jù)庫開發(fā)技術(shù)FJUT行級觸發(fā)器前面所講的都是語句級觸發(fā)器,觸發(fā)器只對每條語句觸發(fā)一次。而行級觸發(fā)器的觸發(fā)次數(shù)與觸發(fā)語句所處理的記錄有關(guān),對每一條記錄都觸發(fā)一次觸發(fā)器例:對如下的更新語句(假設(shè)已存在觸發(fā)器)Update emp set sal=sal*1.1 where age50 and sal500;假設(shè)該條語句更新了5條記錄,則對于語句級觸發(fā)器來說只觸發(fā)一次觸發(fā)器,而對于行級觸發(fā)器來說它觸發(fā)5次該觸發(fā)器。數(shù)據(jù)庫開發(fā)技術(shù)FJUT

18、DML觸發(fā)器激發(fā)順序 如果存在語句之前的觸發(fā)器,先執(zhí)行該觸發(fā)器。對于受語句影響每一行:如果存在行之前的觸發(fā)器,執(zhí)行該觸發(fā)器。執(zhí)行該語句本身。如果存在行之后的觸發(fā)器,執(zhí)行該觸發(fā)器。如果存在語句之后的觸發(fā)器,運行該觸發(fā)器。數(shù)據(jù)庫開發(fā)技術(shù)FJUT總結(jié):各觸發(fā)器的觸發(fā)順序如下 Before語句級before行級觸發(fā)語句after行級after語句級舉例:假如在emp表上建立了4個觸發(fā)器,它們定義如下Create or replace trigger emp_t1Before update on empBegin Insert into tout values(before update 語句觸發(fā)器);

19、End;DML觸發(fā)器激發(fā)順序 數(shù)據(jù)庫開發(fā)技術(shù)FJUTCreate or replace trigger emp_t2Before update on empFor each rowBegin Insert into tout values(before update 行觸發(fā)器);End;Create or replace trigger emp_t3After update on empFor each rowBegin Insert into tout values(after update 行觸發(fā)器);End;DML觸發(fā)器激發(fā)順序 數(shù)據(jù)庫開發(fā)技術(shù)FJUTCreate or replace

20、trigger emp_t4After update on empBegin Insert into tout values(after update 語句觸發(fā)器);End;測試這4個觸發(fā)器觸發(fā)順序如下:Update emp set sal=sal*1.1; DML觸發(fā)器激發(fā)順序 數(shù)據(jù)庫開發(fā)技術(shù)FJUTSelect * from tout; -Before update語句觸發(fā)器語句觸發(fā)器Before update行觸發(fā)器行觸發(fā)器After update行觸發(fā)器行觸發(fā)器Before update行觸發(fā)器行觸發(fā)器After update行觸發(fā)器行觸發(fā)器After update語句觸發(fā)器語句觸發(fā)器

21、DML觸發(fā)器激發(fā)順序 數(shù)據(jù)庫開發(fā)技術(shù)FJUT行級別觸發(fā)器的相關(guān)標識符 觸發(fā)語句處理每一行時,行級別觸發(fā)器都激發(fā)一次。 在觸發(fā)器內(nèi)部,可以通過相關(guān)標識符:old和:new訪問正在處理中的行的數(shù)據(jù)。標識符:old和:new也被稱為偽記錄。 數(shù)據(jù)庫開發(fā)技術(shù)FJUTOLD 代表修改前的行,所以修改之前當前各列的值可分別用(如表emp) OLD.empno, OLD.ename, OLD.job, OLD.sal, OLD.mgr, OLD.deptno等。NEW代表修改之后當前行各列的值可分別用NEW.empno, NEW.ename, NEW.job, NEW.sal, NEW.mgr, NEW.d

22、eptno 等。注意:如果是在PL/SQL塊內(nèi)訪問關(guān)聯(lián)名,需要在關(guān)聯(lián)名前加冒號,如同訪問外部變量一樣,而在PL/SQL塊外訪問則不需加冒號。行級別觸發(fā)器的相關(guān)標識符 數(shù)據(jù)庫開發(fā)技術(shù)FJUTNEW和OLD應用舉例如果用戶希望觸發(fā)器做這樣的工作:對修改職工工資的操作進行合法性檢查。其檢查內(nèi)容如下:修改后的工資要大于修改前的工資工資增量不能超過原工資的10%目前沒有單位的職工不能長工資則為了實現(xiàn)上述功能,觸發(fā)器應該在UPDATE語句修改每一個記錄時都要使觸發(fā)器觸發(fā)一次。數(shù)據(jù)庫開發(fā)技術(shù)FJUTCreate or replace trigger emp_line_tBefore update of sa

23、l On empFor each rowBegin If :new.sal:old.sal*1.1 then Raise_application_error(-20000,:old.empno|工資增長超過10%); Elsif :old.deptno is null then Raise_application_error(-20000,:old.empno|無單位,不能增長); End if;End;NEW和OLD應用舉例數(shù)據(jù)庫開發(fā)技術(shù)FJUT: old和:new相關(guān)標識符 注意注意:old標識符對標識符對INSERT語句未定義,而語句未定義,而:new標識標識符對符對DELETE語句未定

24、義。語句未定義。PL/SQL編譯器不會對在編譯器不會對在INSERT語句中使用的語句中使用的:old和在和在DELETE語句中使用語句中使用的的:new標識符報錯,編譯的結(jié)果將使這兩者的字段標識符報錯,編譯的結(jié)果將使這兩者的字段值為值為NULL。數(shù)據(jù)庫開發(fā)技術(shù)FJUTWHEN子句 語法:WHEN trigger_condition 行觸發(fā)器顧名思義就是對每一行都觸發(fā),但有時只需對某些行觸發(fā),而另外一些行則不需要觸發(fā),我們用WHEN條件子句可以做到這一點。WHEN子句只適用于行級別觸發(fā)器。如果使用該子句,觸發(fā)器體將只對滿足由WHEN子句指定條件的行而執(zhí)行。語法:WHEN trigger_cond

25、ition數(shù)據(jù)庫開發(fā)技術(shù)FJUT帶WHEN子句的觸發(fā)器舉例Create or replace trigger checksalBefore insert or update of sal on empFor each rowWhen (new.sal2000) -在PL/SQL塊外NEW不用冒號Begin /*Trigger body */End;數(shù)據(jù)庫開發(fā)技術(shù)FJUT觸發(fā)器謂詞 條件謂詞可用在觸發(fā)器代碼中判斷觸發(fā)語句的種類條件謂詞可用在觸發(fā)器代碼中判斷觸發(fā)語句的種類幾個謂詞如下:幾個謂詞如下:數(shù)據(jù)庫開發(fā)技術(shù)FJUT使用使用觸發(fā)器謂詞舉例該例子功能是當插入或刪除的職工記錄屬于該例子功能是當插入

26、或刪除的職工記錄屬于30部部門時,記錄下操作的時間,語句種類(插入門時,記錄下操作的時間,語句種類(插入/刪除刪除)和涉及的職工號。)和涉及的職工號。Create or replace trigger emp_t2 After insert or delete On emp For each row When (old.deptno=30 or new.deptno=30)Declare S varchar2(50);數(shù)據(jù)庫開發(fā)技術(shù)FJUTBegin S:=to_char(sysdate,YY_MON_DD HH24:SS); If inserting then Insert into tou

27、t Values (s|插入30部門一個記錄,職工號為: |:new.empno); Elsif deleting then Insert into tout Values (s|刪除30部門一個記錄,職工號為: |:old.empno); End if;End;使用使用觸發(fā)器謂詞舉例用觸發(fā)器跟蹤對表的用觸發(fā)器跟蹤對表的DML操作信操作信息,提供審計和日志記錄。息,提供審計和日志記錄。 數(shù)據(jù)庫開發(fā)技術(shù)FJUT其他觸發(fā)器問題 觸發(fā)器名稱的命名空間(觸發(fā)器名稱的命名空間(Name-space)使用觸發(fā)器的各種限制和不同種類的觸發(fā)器體。使用觸發(fā)器的各種限制和不同種類的觸發(fā)器體。與觸發(fā)器有關(guān)的權(quán)限問題

28、與觸發(fā)器有關(guān)的權(quán)限問題 數(shù)據(jù)庫開發(fā)技術(shù)FJUT觸發(fā)器名稱 命名空間:是一組合法的可供對象作為名字使用的標識符。命名空間:是一組合法的可供對象作為名字使用的標識符。過程、包和表都共享同一個命名空間,在一個數(shù)據(jù)庫模式范過程、包和表都共享同一個命名空間,在一個數(shù)據(jù)庫模式范圍內(nèi),同一命名空間內(nèi)的所有的對象必須具有唯一的名稱。圍內(nèi),同一命名空間內(nèi)的所有的對象必須具有唯一的名稱。觸發(fā)器隸屬于一個獨立的命名空間。也就是說,觸發(fā)器可以觸發(fā)器隸屬于一個獨立的命名空間。也就是說,觸發(fā)器可以有與表和過程相同的名稱。然而,在一個模式范圍內(nèi),給定有與表和過程相同的名稱。然而,在一個模式范圍內(nèi),給定的名稱只能用于一個觸發(fā)

29、器。的名稱只能用于一個觸發(fā)器。 數(shù)據(jù)庫開發(fā)技術(shù)FJUT對觸發(fā)器的限制 觸發(fā)器不能發(fā)出任何事務控制語句,如觸發(fā)器不能發(fā)出任何事務控制語句,如COMMIT、ROLLBACK、SAVEPOINT或或SET TRANSACTION。由觸發(fā)器體調(diào)用的任何過程或函數(shù)都不能發(fā)出任何事務控制語句(除非在由觸發(fā)器體調(diào)用的任何過程或函數(shù)都不能發(fā)出任何事務控制語句(除非在Oracle8i及更高版本中把它們聲明為自治的)。及更高版本中把它們聲明為自治的)。觸發(fā)器體不能聲明任何觸發(fā)器體不能聲明任何LONG或或LONG RAW變量。而且,變量。而且,:new和和:old也也不能指向為之定義的表的不能指向為之定義的表的LONG或或LONG RAW類型的列。類型的列。在在Oracle8及更高版本中,觸發(fā)器體中的代碼可以引用和使用及更高版本中,觸發(fā)器體中的代碼可以引用和使用LOB(大型(大型對象)列,但不能修改該列的值。這個限制也適用于對象列。對象)列,但不能修改該列的值。這個限制也適用于對象列。 數(shù)據(jù)庫開發(fā)技術(shù)FJUT觸發(fā)器體 在在Oracle8i之前的版本中,觸發(fā)器體必須是之前的版

溫馨提示

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

評論

0/150

提交評論