版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第8章Oracle的其它對象8.1序列8.2同義詞8.3存儲過程8.4觸發(fā)器8.5函數(shù)8.6包第8章Oracle的其它對象8.1序列1數(shù)據(jù)庫對象簡介
Oracle數(shù)據(jù)庫對象又稱模式對象數(shù)據(jù)庫對象是邏輯結構的集合,最基本的數(shù)據(jù)庫對象是表其他數(shù)據(jù)庫對象包括:數(shù)據(jù)庫對象同義詞序列視圖索引數(shù)據(jù)庫對象簡介Oracle數(shù)據(jù)庫對象又稱模式對象數(shù)據(jù)庫對2
8.1.1在OMEC中創(chuàng)建序列
8.1.2使用SQL命令創(chuàng)建序列
8.1.3維護序列8.1序列8.1.1在OMEC中創(chuàng)建序列8.1序列3序列序列是用于生成唯一、連續(xù)序號的對象序列可以是升序的,也可以是降序的使用CREATESEQUENCE語句創(chuàng)建序列SQL>CREATESEQUENCEtoys_seq STARTWITH10 INCREMENTBY10 MAXVALUE2000 MINVALUE10 NOCYCLE CACHE10;指定第一個序號從10開始指定序號之間的間隔為10表示序列的最大值為2000表示序列的最小值為10在達到最大值后停止生成下一個值指定內存中預先分配的序號數(shù)序列序列是用于生成唯一、連續(xù)序號的對象SQL>CREATE4
8.1.2使用SQL命令創(chuàng)建序列CREATESEQUENCEsequence_name[INCREMENTBYn][STARTWITHn][MAXVALUEn|NOMAXVALUE][MINVALUEn|NOMINVALUE][CYCLE|NOCYCLE][CACHEn|NOCACHE][ORDER|NOORDER]8.1.2使用SQL命令創(chuàng)建序列CREATESEQUE5
8.1.2使用SQL命令創(chuàng)建序列參數(shù)說明其中sequence_name表示創(chuàng)建的序列名稱,n表示任意正整數(shù)值。INCREMENTBY:指定序列遞增或遞減的間隔數(shù)值,缺省值為1。STARTWITH:序列的起始值。MINVALUE:序列可允許的最小值。若指定為NOMINVALUE,則對升序序列將使用默認值1,而對降序序列使用默認值-1.0E28。8.1.2使用SQL命令創(chuàng)建序列參數(shù)說明6
8.1.2使用SQL命令創(chuàng)建序列參數(shù)說明MAXVALUE:序列可允許的最大值。對降序序列,將使用該序列默認的最大值.若指定為NOMAXVALUE,則將對升序序列使用默認值-1.0E28(-10的28次方).而對降序序列使用默認值-1。CYCLE:指定在達到序列最小值或最大值之后,序列應繼續(xù)生成值。若指定為NOCYCLE,則序列將在達到最小值或最大值后停止生成任何值。缺省值是NOCYCLE。8.1.2使用SQL命令創(chuàng)建序列參數(shù)說明78.1.2使用SQL命令創(chuàng)建序列CACHE:由數(shù)據(jù)庫預分配并存儲序列值的數(shù)目。默認值為20。若指定為NOCACHE,則不預分配序列值的數(shù)目。ORDER:缺省值為NOORDER。指定ORDER參數(shù)使Oracle9i在并行環(huán)境下,按照請求的順序來產生序列號。8.1.2使用SQL命令創(chuàng)建序列CACHE:由數(shù)據(jù)庫預分配并88.1.3維護序列1.查詢序列信息序列的信息可以在ALL_SEQUENCE和USER_SEQUENCE數(shù)據(jù)字典中找到,其中USER_SEQUENCE的數(shù)據(jù)結構如下表所示。8.1.3維護序列1.查詢序列信息98.1.3維護序列列名具體含義SEQUENCE_NAMEMIN_VALUEMAX_VALUEINCREMENT_BYCYCLE_FLAGORDER_FLAGCACHE_SIZELAST_NUMBER序列名最小值最大值增量循環(huán)標志次序標志緩沖大小最后一個數(shù)8.1.3維護序列列名具體含義SEQUEN10訪問序列通過序列的偽列來訪問序列的值NEXTVAL返回序列的下一個值CURRVAL返回序列的當前值SQL>INSERTINTOtoys(toyid,toyname,toyprice)VALUES(toys_seq.NEXTVAL,‘TWENTY’,25);SQL>INSERTINTOtoys(toyid,toyname,toyprice)VALUES(toys_seq.NEXTVAL,’MAGICPENCIL’,75);指定序列的下一個值SQL>SELECTtoys_seq.CURRVALFROMdual;檢索序列的當前值訪問序列通過序列的偽列來訪問序列的值SQL>INSERT118.1.3維護序列
2.修改序列當修改序列時,注意不要使依賴于序列號的主鍵不唯一。利用OEMC修改序列在OEMC的界面中,選擇要修改的序列,單擊鼠標右鍵,從彈出的快捷菜單中選擇“查看/編輯詳細資料”,激活“編輯序列”窗口,在窗口中對序列進行修改即可。8.1.3維護序列2.修改序列128.1.3維護序列利用SQL命令修改序列ALTERSEQUENCEsequence_name[INCREMENTBYn][STARTWITHn][MAXVALUEn|NOMAXVALUE][MINVALUEn|NOMINVALUE][CYCLE|NOCYCLE][CACHEn|NOCACHE][ORDER|NOORDER]8.1.3維護序列利用SQL命令修改序列138.1.3維護序列
3.刪除序列在OEMC的界面中,選擇要刪除的序列,單擊鼠標右鍵,從彈出的快捷菜單中選擇“移去”即可。用SQL語句刪除一個序列和刪除別的對象類似。其語法形式是DROPSEQUENCEsequence_name8.1.3維護序列3.刪除序列14更改和刪除序列SQL>ALTERSEQUENCEtoys_seqMAXVALUE5000CYCLE;使用ALTERSEQUENCE語句修改序列,不能更改序列的STARTWITH參數(shù)使用DROPSEQUENCE語句刪除序列SQL>DROPSEQUENCEtoys_seq;更改和刪除序列SQL>ALTERSEQUENCEtoy15
8.2.1在OEMC中創(chuàng)建同義詞
8.2.2使用SQL命令創(chuàng)建同義詞8.2同義詞8.2.1在OEMC中創(chuàng)建同義詞8.216同義詞3-1同義詞是現(xiàn)有對象的一個別名。簡化SQL語句隱藏對象的名稱和所有者提供對對象的公共訪問同義詞共有兩種類型:同義詞私有同義詞公有同義詞私有同義詞只能在其模式內訪問,且不能與當前模式的對象同名。公有同義詞可被所有的數(shù)據(jù)庫用戶訪問。同義詞3-1同義詞是現(xiàn)有對象的一個別名。同義詞私有同義詞公17同義詞3-2CREATESYNONYMempFORSCOTT.emp;SCOTT.emp的別名模式名表名私有同義詞公有同義詞CREATEPUBLICSYNONYMemp_synFORSCOTT.emp;同義詞名稱同義詞3-2CREATESYNONYMempFOR18同義詞3-3創(chuàng)建或替換現(xiàn)有的同義詞CREATEORREPLACESYNONYMemp_synFORSCOTT.emp;替換現(xiàn)有的同義詞SQL>DROPSYNONYMemp;SQL>DROPPUBLICSYNONYMemp_syn;刪除同義詞同義詞3-3創(chuàng)建或替換現(xiàn)有的同義詞CREATEORRE198.3.1在OEMC中創(chuàng)建存儲過程8.3.2使用SQL命令創(chuàng)建存儲過程8.3存儲過程8.3.1在OEMC中創(chuàng)建存儲過程8.3存儲過程20子程序2-1命名的PL/SQL塊,編譯并存儲在數(shù)據(jù)庫中。子程序的各個部分:聲明部分可執(zhí)行部分異常處理部分(可選)子程序的分類:過程-執(zhí)行某些操作函數(shù)-執(zhí)行操作并返回值子程序2-1命名的PL/SQL塊,編譯并存儲在數(shù)據(jù)庫中21子程序2-2子程序的優(yōu)點:模塊化將程序分解為邏輯模塊可重用性可以被任意數(shù)目的程序調用可維護性簡化維護操作安全性通過設置權限,使數(shù)據(jù)更安全子程序2-2子程序的優(yōu)點:22過程8-1過程是用于完成特定任務的子程序
例如:前往售票廳詢問關于車票的信息排隊等候在柜臺購買車票過程8-1過程是用于完成特定任務的子程序前往售票廳詢問關23過程8-2創(chuàng)建過程的語法:CREATE[ORREPLACE]PROCEDURE<procedurename>[(<parameterlist>)]IS|AS<localvariabledeclaration>BEGIN<executablestatements>[EXCEPTION<exceptionhandlers>]END;創(chuàng)建過程,可指定運行過程需傳遞的參數(shù)處理異常包括在過程中要執(zhí)行的語句過程8-2創(chuàng)建過程的語法:創(chuàng)建過程,可指定運行過程需傳遞的24過程8-3CREATEORREPLACEPROCEDUREfind_emp(emp_noNUMBER)ASempnameVARCHAR2(20);BEGINSELECTenameINTOempnameFROMEMPWHEREempno=emp_no;DBMS_OUTPUT.PUT_LINE('雇員姓名是'||empname);EXCEPTIONWHENNO_DATA_FOUNDTHENDBMS_OUTPUT.PUT_LINE('雇員編號未找到');ENDfind_emp;/過程8-3CREATEORREPLACEPROCED25過程8-4過程參數(shù)的三種模式:IN用于接受調用程序的值默認的參數(shù)模式OUT用于向調用程序返回值INOUT用于接受調用程序的值,并向調用程序返回更新的值過程8-4過程參數(shù)的三種模式:26過程8-5SQL>CREATEORREPLACEPROCEDUREitemdesc(item_codeINVARCHAR2)ISv_itemdescVARCHAR2(5);BEGINSELECTitemdescINTOv_itemdescFROMitemfileWHEREitemcode=item_code;DBMS_OUTPUT.PUT_LINE(item_code||'項目的說明為'||v_itemdesc);END;/SQL>SETSERVEROUTPUTONSQL>EXECUTEitemdesc('i201');執(zhí)行過程的語法:EXECUTEprocedure_name(parameters_list);過程8-5SQL>CREATEORREPLACEP27過程8-6SQL>CREATEORREPLACEPROCEDUREtest(value1INVARCHAR2,value2OUTNUMBER)ISidentityNUMBER;BEGINSELECTITEMRATEINTOidentityFROMitemFileWHEREitemcode=value1;IFidentity<200THENvalue2:=100;ENDIF;END;DECLAREvalue1VARCHAR2(5):='i202';value2NUMBER;BEGINtest(value1,value2);DBMS_OUTPUT.PUT_LINE('value2的值為'||TO_CHAR(value2));END;/過程8-6SQL>CREATEORREPLACEP28過程8-7CREATEORREPLACEPROCEDUREswap(p1INOUTNUMBER,p2INOUTNUMBER)ISv_tempNUMBER;BEGINv_temp:=p1;p1:=p2;p2:=v_temp;END;/SQL>SETSERVEROUTONSQL>DECLAREnum1NUMBER:=100;num2NUMBER:=200;BEGINswap(num1,num2);DBMS_OUTPUT.PUT_LINE('num1='||num1);DBMS_OUTPUT.PUT_LINE('num2='||num2);END;/過程8-7CREATEORREPLACEPROCED29過程8-8將過程的執(zhí)行權限授予其他用戶:刪除過程:SQL>GRANTEXECUTEONfind_empTOMARTIN;SQL>GRANTEXECUTEONswapTOPUBLIC;SQL>DROPPROCEDUREfind_emp;過程8-8將過程的執(zhí)行權限授予其他用戶:SQL>GRAN30函數(shù)4-1函數(shù)是可以返回值的命名的PL/SQL子程序。
創(chuàng)建函數(shù)的語法:
CREATE[ORREPLACE]FUNCTION
<functionname>[(param1,param2)]RETURN<datatype>IS|AS[localdeclarations]BEGINExecutableStatements;RETURNresult;EXCEPTIONExceptionhandlers;END;函數(shù)4-1函數(shù)是可以返回值的命名的PL/SQL子程序。31函數(shù)4-2定義函數(shù)的限制:函數(shù)只能接受IN參數(shù),而不能接受INOUT或OUT參數(shù)形參不能是PL/SQL類型函數(shù)的返回類型也必須是數(shù)據(jù)庫類型訪問函數(shù)的兩種方式:使用PL/SQL塊使用SQL語句函數(shù)4-2定義函數(shù)的限制:32函數(shù)4-3創(chuàng)建函數(shù):從SQL語句調用函數(shù):CREATEORREPLACEFUNCTIONfun_helloRETURNVARCHAR2ISBEGINRETURN'朋友,您好';END;/SQL>SELECTfun_helloFROMDUAL;函數(shù)4-3創(chuàng)建函數(shù):CREATEORREPLACEF33函數(shù)4-4CREATEORREPLACEFUNCTIONitem_price_range(priceNUMBER)RETURNVARCHAR2ASmin_priceNUMBER;max_priceNUMBER;BEGINSELECTMAX(ITEMRATE),MIN(ITEMRATE)INTOmax_price,min_priceFROMitemfile;IFprice>=min_priceANDprice<=max_priceTHENRETURN'輸入的單價介于最低價與最高價之間';ELSERETURN'超出范圍';ENDIF;END;/DECLAREPNUMBER:=300;MSGVARCHAR2(200);BEGINMSG:=item_price_range(300);DBMS_OUTPUT.PUT_LINE(MSG);END;/函數(shù)4-4CREATEORREPLACEFUNCTI34過程和函數(shù)的比較過程函數(shù)作為PL/SQL語句執(zhí)行作為表達式的一部分調用在規(guī)格說明中不包含RETURN子句必須在規(guī)格說明中包含RETURN子句不返回任何值必須返回單個值可以包含RETURN語句,但是與函數(shù)不同,它不能用于返回值必須包含至少一條RETURN
語句過程和函數(shù)的比較過程函數(shù)作為PL/SQL語句執(zhí)行作35函數(shù)4-5刪除函數(shù)從SQL表達式調用函數(shù)有以下限制:從SELECT語句調用的任何函數(shù)均不能修改數(shù)據(jù)庫表當遠程執(zhí)行或并行執(zhí)行時,函數(shù)不得讀取或寫入程序包中變量的值。從SELECT,VALUES或SET子句調用的函數(shù)可以寫入程序包中變量,所有其它子句中的函數(shù)均不能寫入程序包。如果函數(shù)調用執(zhí)行UPDATE的存儲過程,則該函數(shù)不能在SQL語句內使用。DROPFUNCTIONitem_price_range;函數(shù)4-5刪除函數(shù)從SQL表達式調用函數(shù)有以下限制:DRO36
8.4.l利用OEMC創(chuàng)建觸發(fā)器
8.4.2使用SQL命令創(chuàng)建觸發(fā)器8.4觸發(fā)器8.4.l利用OEMC創(chuàng)建觸發(fā)器8.4觸發(fā)器37觸發(fā)器觸發(fā)器是當特定事件出現(xiàn)時自動執(zhí)行的存儲過程特定事件可以是執(zhí)行更新的DML語句和DDL語句觸發(fā)器不能被顯式調用觸發(fā)器的功能:自動生成數(shù)據(jù)自定義復雜的安全權限提供審計和日志記錄啟用復雜的業(yè)務邏輯觸發(fā)器觸發(fā)器是當特定事件出現(xiàn)時自動執(zhí)行的存儲過程38創(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;創(chuàng)建觸發(fā)器的語法CREATE[ORREPLACE]TR39觸發(fā)器的組成部分3-1觸發(fā)器由三部分組成:觸發(fā)器語句(事件)定義激活觸發(fā)器的DML事件和DDL事件觸發(fā)器限制執(zhí)行觸發(fā)器的條件,該條件必須為真才能激活觸發(fā)器觸發(fā)器操作(主體)包含一些SQL語句和代碼,它們在發(fā)出了觸發(fā)器語句且觸發(fā)限制的值為真時運行觸發(fā)器的組成部分3-1觸發(fā)器由三部分組成:40觸發(fā)器的組成部分3-2
SQL>CREATEORREPLACETRIGGERtrig_sal AFTERUPDATEOFempsalONsalary_records
…觸發(fā)器語句為salary_records表創(chuàng)建trig-sal觸發(fā)器在更新emp_sal列之后激活觸發(fā)器觸發(fā)器限制SQL> … FOREACHROW WHEN(NEW.empsal>OLD.empsal) DECLARE Sal_diffNUMBER; … 只有在WHEN子句中的條件得到滿足時,才激活trig_sal觸發(fā)器觸發(fā)器操作SQL>… BEGIN sal_diff:=:NEW.empsal-:OLD.empsal; DBMS_OUTPUT.PUT_LINE(‘工資差額:’sal_diff); END;如果WHEN子句中的條件得到滿足,將執(zhí)行BEGIN塊中的代碼觸發(fā)器的組成部分3-2SQL>CREATEORRE41觸發(fā)器的組成部分3-3Oracle數(shù)據(jù)庫更新表保存更新激活觸發(fā)器AFTER觸發(fā)器的工作原理BEFORE觸發(fā)器的工作原理更新表激活觸發(fā)器保存更新Oracle數(shù)據(jù)庫觸發(fā)器的組成部分3-3Oracle更新表保存更新激活觸發(fā)42創(chuàng)建觸發(fā)器CREATEORREPLACETRIGGERaiu_itemfileAFTERINSERTONitemfileFOREACHROWBEGINIF(:NEW.qty_hand=0)THENDBMS_OUTPUT.PUT_LINE('警告:已插入記錄,但數(shù)量為零');ELSEDBMS_OUTPUT.PUT_LINE(‘已插入記錄');ENDIF;END;/創(chuàng)建觸發(fā)器CREATEORREPLACETRIGGER43觸發(fā)器類型6-1觸發(fā)器的類型有:觸發(fā)器類型模式(DDL)觸發(fā)器DML觸發(fā)器數(shù)據(jù)庫級觸發(fā)器語句級觸發(fā)器行級觸發(fā)器INSTEADOF觸發(fā)器觸發(fā)器類型6-1觸發(fā)器的類型有:觸發(fā)器類型模式(DDL)D44觸發(fā)器類型6-2DDL觸發(fā)器數(shù)據(jù)庫級觸發(fā)器DML觸發(fā)器語句級觸發(fā)器行級觸發(fā)器INSTEADOF觸發(fā)器在模式中執(zhí)行DDL語句時執(zhí)行在發(fā)生打開、關閉、登錄和退出數(shù)據(jù)庫等系統(tǒng)事件時執(zhí)行在對表或視圖執(zhí)行DML語句時執(zhí)行無論受影響的行數(shù)是多少,都只執(zhí)行一次對DML語句修改的每個行執(zhí)行一次用于用戶不能直接使用DML語句修改的視圖觸發(fā)器類型6-2DDL觸發(fā)器在模式中執(zhí)行DDL語句時45觸發(fā)器類型6-3行級觸發(fā)器SQL>CREATETABLETEST_TRG(IDNUMBER,NAMEVARCHAR2(20));SQL>CREATESEQUENCESEQ_TEST;SQL>CREATEORREPLACETRIGGERBI_TEST_TRGBEFOREINSERTORUPDATEOFIDONTEST_TRGFOREACHROWBEGINIFINSERTINGTHENSELECTSEQ_TEST.NEXTVALINTO:NEW.IDFROMDUAL;ELSERAISE_APPLICATION_ERROR(-20020,'不允許更新ID值!');ENDIF;END;/觸發(fā)器類型6-3行級觸發(fā)器SQL>CREATETABL46觸發(fā)器類型6-4SQL>CREATEORREPLACETRIGGERtrgdemoAFTERINSERTORUPDATEORDELETEONorder_masterBEGINIFUPDATINGTHENDBMS_OUTPUT.PUT_LINE(‘已更新ORDER_MASTER中的數(shù)據(jù)');ELSIFDELETINGTHENDBMS_OUTPUT.PUT_LINE(‘已刪除ORDER_MASTER中的數(shù)據(jù)');ELSIFINSERTINGTHENDBMS_OUTPUT.PUT_LINE(‘已在ORDER_MASTER中插入數(shù)據(jù)');ENDIF;END;/語句級觸發(fā)器觸發(fā)器類型6-4SQL>CREATEORREPLAC47觸發(fā)器類型6-5SQL>CREATEORREPLACETRIGGERupd_ord_viewINSTEADOFUPDATEONord_viewFOREACHROWBEGIN UPDATEorder_master SETvencode=:NEW.vencode WHEREorderno=:NEW.orderno; DBMS_OUTPUT.PUT_LINE(‘已激活觸發(fā)器');END;/INSTEADOF觸發(fā)器觸發(fā)器類型6-5SQL>CREATEORREPLAC48觸發(fā)器類型6-6SQL>CREATETABLEdropped_obj(obj_nameVARCHAR2(30),obj_typeVARCHAR2(20),drop_dateDATE);SQL>CREATEORREPLACETRIGGERlog_drop_objAFTERDROPONSCHEMABEGININSERTINTOdropped_objVALUES(ORA_DICT_OBJ_NAME,ORA_DICT_OBJ_TYPE,SYSDATE);END;/模式觸發(fā)器觸發(fā)器類型6-6SQL>CREATETABLEdro49啟用和禁用觸發(fā)器刪除觸發(fā)器啟用、禁用和刪除觸發(fā)器SQL>ALTERTRIGGERaiu_itemfileDISABLE;SQL>ALTERTRIGGERaiu_itemfileENABLE;SQL>DROPTRIGGERaiu_itemfile;啟用和禁用觸發(fā)器啟用、禁用和刪除觸發(fā)器SQL>ALTER50查看有關觸發(fā)器的信息SQL>SELECTTRIGGER_NAMEFROMUSER_TRIGGERSWHERETABLE_NAME='EMP';SQL>SELECTTRIGGER_TYPE,TRIGGERING_EVENT,WHEN_CLAUSEFROMUSER_TRIGGERSWHERETRIGGER_NAME='BIU_EMP_DEPTNO';USER_TRIGGERS數(shù)據(jù)字典視圖包含有關觸發(fā)器的信息查看有關觸發(fā)器的信息SQL>SELECTTRIGGER_51程序包程序包是對相關過程、函數(shù)、變量、游標和異常等對象的封裝程序包由規(guī)范和主體兩部分組成聲明程序包中公共對象。包括類型、變量、常量、異常、游標規(guī)范和子程序規(guī)范等聲明程序包私有對象和實現(xiàn)在包規(guī)范中聲明的子程序和游標程序包規(guī)范主體程序包程序包是對相關過程、函數(shù)、變量、游標和異常等對象的封裝52創(chuàng)建程序包2-1程序包規(guī)范CREATE[ORREPLACE]PACKAGEpackage_nameIS|AS[Publicitemdeclarations][Subprogramspecification]END[package_name];程序包主體CREATE[ORREPLACE]PACKAGEBODYpackage_nameIS|AS[Privateitemdeclarations][Subprogrambodies][BEGINInitialization]END[package_name];創(chuàng)建程序包2-1程序包規(guī)范程序包主體53創(chuàng)建程序包2-2CREATEORREPLACEPACKAGEpack_meISPROCEDUREorder_proc(ornoVARCHAR2);FUNCTIONorder_fun(ornosVARCHAR2)RETURNVARCHAR2;ENDpack_me;/CREATEORREPLACEPACKAGEBODYpack_meASPROCEDUREorder_proc(ornoVARCHAR2)ISstatCHAR(1);BEGINSELECTostatusINTOstatFROMorder_masterWHEREorderno=orno;……ENDorder_proc;FUNCTIONorder_fun(ornosVARCHAR2)RETURNVARCHAR2ISicodeVARCHAR2(5);ocodeVARCHAR2(5);BEGIN……ENDorder_fun;ENDpack_me;/創(chuàng)建程序包2-2CREATEORREPLACEPAC54程序包的優(yōu)點模塊化更輕松的應用程序設計信息隱藏新增功能性能更佳程序包的優(yōu)點模塊化55有關子程序和程序包的信息USER_OBJECTS視圖包含用戶創(chuàng)建的子程序和程序包的信息USER_SOURCE視圖存儲子程序和程序包的源代碼SELECTobject_name,object_typeFROMUSER_OBJECTSWHEREobject_typeIN('PROCEDURE','FUNCTION','PACKAGE','PACKAGEBODY');SELECTline,textFROMUSER_SOURCEWHERENAME='TEST';有關子程序和程序包的信息USER_OBJECTS視圖包含用56內置程序包擴展數(shù)據(jù)庫的功能為PL/SQL提供對SQL功能的訪問用戶SYS擁有所有程序包是公有同義詞可以由任何用戶訪問內置程序包擴展數(shù)據(jù)庫的功能57內置程序包一些內置程序包:程序包名稱說明STANDARD和DBMS_STANDARD定義和擴展PL/SQL語言環(huán)境DBMS_LOB提供對LOB數(shù)據(jù)類型進行操作的功能DBMS_OUTPUT處理PL/SQL塊和子程序輸出調試信息DBMS_RANDOM提供隨機數(shù)生成器DBMS_SQL允許用戶使用動態(tài)SQLDBMS_XMLDOM用DOM模型讀寫XML類型的數(shù)據(jù)DBMS_XMLPARSERXML解析,處理XML文檔內容和結構DBMS_XMLQUERY提供將數(shù)據(jù)轉換為XML類型的功能DBMS_XSLPROCESSOR提供XSLT功能,轉換XML文檔UTL_FILE用PL/SQL程序來讀寫操作系統(tǒng)文本文件內置程序包一些內置程序包:程序包名稱說明STANDARD和D58內置程序包SQL>SETSERVEROUTPUTONSQL>BEGINDBMS_OUTPUT.PUT_LINE('打印三角形');FORiIN1..9LOOPFORjIN1..iLOOPDBMS_OUTPUT.PUT('*');ENDLOOPfor_j;DBMS_OUTPUT.NEW_LINE;ENDLOOPfor_i;END;/DBMS_OUTPUT包顯示PL/SQL塊和子程序的調試信息。內置程序包SQL>SETSERVEROUTPUTOND59內置程序包DBMS_LOB包提供用于處理大型對象的過程和函數(shù)DBMS_XMLQUERY包用于將查詢結果轉換為XML格式內置程序包DBMS_LOB包提供用于處理大型對象的過程和函60內置程序包SQL>DECLAREresultCLOB;xmlstrVARCHAR2(32767);lineVARCHAR2(2000);line_noINTEGER:=1;BEGINresult:=DBMS_XMLQuery.getXml('SELECTempno,enameFROMemployee');xmlstr:=DBMS_LOB.SUBSTR(result,32767);LOOPEXITWHENxmlstrISNULL;line:=SUBSTR(xmlstr,1,INSTR(xmlstr,CHR(10))-1);DBMS_OUTPUT.PUT_LINE(line_no||':'||line);xmlstr:=SUBSTR(xmlstr,INSTR(xmlstr,CHR(10))+1);line_no:=line_no+1;ENDLOOP; END;/內置程序包SQL>DECLARE61內置程序包SQL>SETSERVEROUTPUTONSQL>DECLAREl_numNUMBER;counterNUMBER;BEGINcounter:=1;WHILEcounter<=10LOOPl_num:=DBMS_RANDOM.RANDOM;DBMS_OUTPUT.PUT_LINE(l_num);counter:=counter+1;ENDLOOP;END;/DBMS_RANDOM包可用來生成隨機整數(shù)內置程序包SQL>SETSERVEROUTPUTOND62內置程序包SQL>CREATEDIRECTORYTEST_DIRAS'C:\DEVELOP';SQL>GRANTREAD,WRITEONDIRECTORYTEST_DIRTOSCOTT;UTL_FILE包用于讀寫操作系統(tǒng)文本文件操作文件的一般過程是打開、讀或寫、關閉UTL_FILE包指定文件路徑依賴于DIRECTORY對象內置程序包SQL>CREATEDIRECTORYTES63內置程序包SQL>SETSERVEROUTPUTONSQL>DECLAREinput_fileUTL_FILE.FILE_TYPE;input_bufferVARCHAR2(4000);BEGINinput_file:=UTL_FILE.FOPEN('TEST_DIR','employees.xml','r');LOOPUTL_FILE.GET_LINE(input_file,input_buffer);DBMS_OUTPUT.PUT_LINE(input_buffer);ENDLOOP;UTL_FILE.FCLOSE(input_file);EXCEPTIONWHENNO_DATA_FOUNDTHENDBMS_OUTPUT.PUT_LINE('------------------');END;/內置程序包SQL>SETSERVEROUTPUTON64第8章Oracle的其它對象8.1序列8.2同義詞8.3存儲過程8.4觸發(fā)器8.5函數(shù)8.6包第8章Oracle的其它對象8.1序列65數(shù)據(jù)庫對象簡介
Oracle數(shù)據(jù)庫對象又稱模式對象數(shù)據(jù)庫對象是邏輯結構的集合,最基本的數(shù)據(jù)庫對象是表其他數(shù)據(jù)庫對象包括:數(shù)據(jù)庫對象同義詞序列視圖索引數(shù)據(jù)庫對象簡介Oracle數(shù)據(jù)庫對象又稱模式對象數(shù)據(jù)庫對66
8.1.1在OMEC中創(chuàng)建序列
8.1.2使用SQL命令創(chuàng)建序列
8.1.3維護序列8.1序列8.1.1在OMEC中創(chuàng)建序列8.1序列67序列序列是用于生成唯一、連續(xù)序號的對象序列可以是升序的,也可以是降序的使用CREATESEQUENCE語句創(chuàng)建序列SQL>CREATESEQUENCEtoys_seq STARTWITH10 INCREMENTBY10 MAXVALUE2000 MINVALUE10 NOCYCLE CACHE10;指定第一個序號從10開始指定序號之間的間隔為10表示序列的最大值為2000表示序列的最小值為10在達到最大值后停止生成下一個值指定內存中預先分配的序號數(shù)序列序列是用于生成唯一、連續(xù)序號的對象SQL>CREATE68
8.1.2使用SQL命令創(chuàng)建序列CREATESEQUENCEsequence_name[INCREMENTBYn][STARTWITHn][MAXVALUEn|NOMAXVALUE][MINVALUEn|NOMINVALUE][CYCLE|NOCYCLE][CACHEn|NOCACHE][ORDER|NOORDER]8.1.2使用SQL命令創(chuàng)建序列CREATESEQUE69
8.1.2使用SQL命令創(chuàng)建序列參數(shù)說明其中sequence_name表示創(chuàng)建的序列名稱,n表示任意正整數(shù)值。INCREMENTBY:指定序列遞增或遞減的間隔數(shù)值,缺省值為1。STARTWITH:序列的起始值。MINVALUE:序列可允許的最小值。若指定為NOMINVALUE,則對升序序列將使用默認值1,而對降序序列使用默認值-1.0E28。8.1.2使用SQL命令創(chuàng)建序列參數(shù)說明70
8.1.2使用SQL命令創(chuàng)建序列參數(shù)說明MAXVALUE:序列可允許的最大值。對降序序列,將使用該序列默認的最大值.若指定為NOMAXVALUE,則將對升序序列使用默認值-1.0E28(-10的28次方).而對降序序列使用默認值-1。CYCLE:指定在達到序列最小值或最大值之后,序列應繼續(xù)生成值。若指定為NOCYCLE,則序列將在達到最小值或最大值后停止生成任何值。缺省值是NOCYCLE。8.1.2使用SQL命令創(chuàng)建序列參數(shù)說明718.1.2使用SQL命令創(chuàng)建序列CACHE:由數(shù)據(jù)庫預分配并存儲序列值的數(shù)目。默認值為20。若指定為NOCACHE,則不預分配序列值的數(shù)目。ORDER:缺省值為NOORDER。指定ORDER參數(shù)使Oracle9i在并行環(huán)境下,按照請求的順序來產生序列號。8.1.2使用SQL命令創(chuàng)建序列CACHE:由數(shù)據(jù)庫預分配并728.1.3維護序列1.查詢序列信息序列的信息可以在ALL_SEQUENCE和USER_SEQUENCE數(shù)據(jù)字典中找到,其中USER_SEQUENCE的數(shù)據(jù)結構如下表所示。8.1.3維護序列1.查詢序列信息738.1.3維護序列列名具體含義SEQUENCE_NAMEMIN_VALUEMAX_VALUEINCREMENT_BYCYCLE_FLAGORDER_FLAGCACHE_SIZELAST_NUMBER序列名最小值最大值增量循環(huán)標志次序標志緩沖大小最后一個數(shù)8.1.3維護序列列名具體含義SEQUEN74訪問序列通過序列的偽列來訪問序列的值NEXTVAL返回序列的下一個值CURRVAL返回序列的當前值SQL>INSERTINTOtoys(toyid,toyname,toyprice)VALUES(toys_seq.NEXTVAL,‘TWENTY’,25);SQL>INSERTINTOtoys(toyid,toyname,toyprice)VALUES(toys_seq.NEXTVAL,’MAGICPENCIL’,75);指定序列的下一個值SQL>SELECTtoys_seq.CURRVALFROMdual;檢索序列的當前值訪問序列通過序列的偽列來訪問序列的值SQL>INSERT758.1.3維護序列
2.修改序列當修改序列時,注意不要使依賴于序列號的主鍵不唯一。利用OEMC修改序列在OEMC的界面中,選擇要修改的序列,單擊鼠標右鍵,從彈出的快捷菜單中選擇“查看/編輯詳細資料”,激活“編輯序列”窗口,在窗口中對序列進行修改即可。8.1.3維護序列2.修改序列768.1.3維護序列利用SQL命令修改序列ALTERSEQUENCEsequence_name[INCREMENTBYn][STARTWITHn][MAXVALUEn|NOMAXVALUE][MINVALUEn|NOMINVALUE][CYCLE|NOCYCLE][CACHEn|NOCACHE][ORDER|NOORDER]8.1.3維護序列利用SQL命令修改序列778.1.3維護序列
3.刪除序列在OEMC的界面中,選擇要刪除的序列,單擊鼠標右鍵,從彈出的快捷菜單中選擇“移去”即可。用SQL語句刪除一個序列和刪除別的對象類似。其語法形式是DROPSEQUENCEsequence_name8.1.3維護序列3.刪除序列78更改和刪除序列SQL>ALTERSEQUENCEtoys_seqMAXVALUE5000CYCLE;使用ALTERSEQUENCE語句修改序列,不能更改序列的STARTWITH參數(shù)使用DROPSEQUENCE語句刪除序列SQL>DROPSEQUENCEtoys_seq;更改和刪除序列SQL>ALTERSEQUENCEtoy79
8.2.1在OEMC中創(chuàng)建同義詞
8.2.2使用SQL命令創(chuàng)建同義詞8.2同義詞8.2.1在OEMC中創(chuàng)建同義詞8.280同義詞3-1同義詞是現(xiàn)有對象的一個別名。簡化SQL語句隱藏對象的名稱和所有者提供對對象的公共訪問同義詞共有兩種類型:同義詞私有同義詞公有同義詞私有同義詞只能在其模式內訪問,且不能與當前模式的對象同名。公有同義詞可被所有的數(shù)據(jù)庫用戶訪問。同義詞3-1同義詞是現(xiàn)有對象的一個別名。同義詞私有同義詞公81同義詞3-2CREATESYNONYMempFORSCOTT.emp;SCOTT.emp的別名模式名表名私有同義詞公有同義詞CREATEPUBLICSYNONYMemp_synFORSCOTT.emp;同義詞名稱同義詞3-2CREATESYNONYMempFOR82同義詞3-3創(chuàng)建或替換現(xiàn)有的同義詞CREATEORREPLACESYNONYMemp_synFORSCOTT.emp;替換現(xiàn)有的同義詞SQL>DROPSYNONYMemp;SQL>DROPPUBLICSYNONYMemp_syn;刪除同義詞同義詞3-3創(chuàng)建或替換現(xiàn)有的同義詞CREATEORRE838.3.1在OEMC中創(chuàng)建存儲過程8.3.2使用SQL命令創(chuàng)建存儲過程8.3存儲過程8.3.1在OEMC中創(chuàng)建存儲過程8.3存儲過程84子程序2-1命名的PL/SQL塊,編譯并存儲在數(shù)據(jù)庫中。子程序的各個部分:聲明部分可執(zhí)行部分異常處理部分(可選)子程序的分類:過程-執(zhí)行某些操作函數(shù)-執(zhí)行操作并返回值子程序2-1命名的PL/SQL塊,編譯并存儲在數(shù)據(jù)庫中85子程序2-2子程序的優(yōu)點:模塊化將程序分解為邏輯模塊可重用性可以被任意數(shù)目的程序調用可維護性簡化維護操作安全性通過設置權限,使數(shù)據(jù)更安全子程序2-2子程序的優(yōu)點:86過程8-1過程是用于完成特定任務的子程序
例如:前往售票廳詢問關于車票的信息排隊等候在柜臺購買車票過程8-1過程是用于完成特定任務的子程序前往售票廳詢問關87過程8-2創(chuàng)建過程的語法:CREATE[ORREPLACE]PROCEDURE<procedurename>[(<parameterlist>)]IS|AS<localvariabledeclaration>BEGIN<executablestatements>[EXCEPTION<exceptionhandlers>]END;創(chuàng)建過程,可指定運行過程需傳遞的參數(shù)處理異常包括在過程中要執(zhí)行的語句過程8-2創(chuàng)建過程的語法:創(chuàng)建過程,可指定運行過程需傳遞的88過程8-3CREATEORREPLACEPROCEDUREfind_emp(emp_noNUMBER)ASempnameVARCHAR2(20);BEGINSELECTenameINTOempnameFROMEMPWHEREempno=emp_no;DBMS_OUTPUT.PUT_LINE('雇員姓名是'||empname);EXCEPTIONWHENNO_DATA_FOUNDTHENDBMS_OUTPUT.PUT_LINE('雇員編號未找到');ENDfind_emp;/過程8-3CREATEORREPLACEPROCED89過程8-4過程參數(shù)的三種模式:IN用于接受調用程序的值默認的參數(shù)模式OUT用于向調用程序返回值INOUT用于接受調用程序的值,并向調用程序返回更新的值過程8-4過程參數(shù)的三種模式:90過程8-5SQL>CREATEORREPLACEPROCEDUREitemdesc(item_codeINVARCHAR2)ISv_itemdescVARCHAR2(5);BEGINSELECTitemdescINTOv_itemdescFROMitemfileWHEREitemcode=item_code;DBMS_OUTPUT.PUT_LINE(item_code||'項目的說明為'||v_itemdesc);END;/SQL>SETSERVEROUTPUTONSQL>EXECUTEitemdesc('i201');執(zhí)行過程的語法:EXECUTEprocedure_name(parameters_list);過程8-5SQL>CREATEORREPLACEP91過程8-6SQL>CREATEORREPLACEPROCEDUREtest(value1INVARCHAR2,value2OUTNUMBER)ISidentityNUMBER;BEGINSELECTITEMRATEINTOidentityFROMitemFileWHEREitemcode=value1;IFidentity<200THENvalue2:=100;ENDIF;END;DECLAREvalue1VARCHAR2(5):='i202';value2NUMBER;BEGINtest(value1,value2);DBMS_OUTPUT.PUT_LINE('value2的值為'||TO_CHAR(value2));END;/過程8-6SQL>CREATEORREPLACEP92過程8-7CREATEORREPLACEPROCEDUREswap(p1INOUTNUMBER,p2INOUTNUMBER)ISv_tempNUMBER;BEGINv_temp:=p1;p1:=p2;p2:=v_temp;END;/SQL>SETSERVEROUTONSQL>DECLAREnum1NUMBER:=100;num2NUMBER:=200;BEGINswap(num1,num2);DBMS_OUTPUT.PUT_LINE('num1='||num1);DBMS_OUTPUT.PUT_LINE('num2='||num2);END;/過程8-7CREATEORREPLACEPROCED93過程8-8將過程的執(zhí)行權限授予其他用戶:刪除過程:SQL>GRANTEXECUTEONfind_empTOMARTIN;SQL>GRANTEXECUTEONswapTOPUBLIC;SQL>DROPPROCEDUREfind_emp;過程8-8將過程的執(zhí)行權限授予其他用戶:SQL>GRAN94函數(shù)4-1函數(shù)是可以返回值的命名的PL/SQL子程序。
創(chuàng)建函數(shù)的語法:
CREATE[ORREPLACE]FUNCTION
<functionname>[(param1,param2)]RETURN<datatype>IS|AS[localdeclarations]BEGINExecutableStatements;RETURNresult;EXCEPTIONExceptionhandlers;END;函數(shù)4-1函數(shù)是可以返回值的命名的PL/SQL子程序。95函數(shù)4-2定義函數(shù)的限制:函數(shù)只能接受IN參數(shù),而不能接受INOUT或OUT參數(shù)形參不能是PL/SQL類型函數(shù)的返回類型也必須是數(shù)據(jù)庫類型訪問函數(shù)的兩種方式:使用PL/SQL塊使用SQL語句函數(shù)4-2定義函數(shù)的限制:96函數(shù)4-3創(chuàng)建函數(shù):從SQL語句調用函數(shù):CREATEORREPLACEFUNCTIONfun_helloRETURNVARCHAR2ISBEGINRETURN'朋友,您好';END;/SQL>SELECTfun_helloFROMDUAL;函數(shù)4-3創(chuàng)建函數(shù):CREATEORREPLACEF97函數(shù)4-4CREATEORREPLACEFUNCTIONitem_price_range(priceNUMBER)RETURNVARCHAR2ASmin_priceNUMBER;max_priceNUMBER;BEGINSELECTMAX(ITEMRATE),MIN(ITEMRATE)INTOmax_price,min_priceFROMitemfile;IFprice>=min_priceANDprice<=max_priceTHENRETURN'輸入的單價介于最低價與最高價之間';ELSERETURN'超出范圍';ENDIF;END;/DECLAREPNUMBER:=300;MSGVARCHAR2(200);BEGINMSG:=item_price_range(300);DBMS_OUTPUT.PUT_LINE(MSG);END;/函數(shù)4-4CREATEORREPLACEFUNCTI98過程和函數(shù)的比較過程函數(shù)作為PL/SQL語句執(zhí)行作為表達式的一部分調用在規(guī)格說明中不包含RETURN子句必須在規(guī)格說明中包含RETURN子句不返回任何值必須返回單個值可以包含RETURN語句,但是與函數(shù)不同,它不能用于返回值必須包含至少一條RETURN
語句過程和函數(shù)的比較過程函數(shù)作為PL/SQL語句執(zhí)行作99函數(shù)4-5刪除函數(shù)從SQL表達式調用函數(shù)有以下限制:從SELECT語句調用的任何函數(shù)均不能修改數(shù)據(jù)庫表當遠程執(zhí)行或并行執(zhí)行時,函數(shù)不得讀取或寫入程序包中變量的值。從SELECT,VALUES或SET子句調用的函數(shù)可以寫入程序包中變量,所有其它子句中的函數(shù)均不能寫入程序包。如果函數(shù)調用執(zhí)行UPDATE的存儲過程,則該函數(shù)不能在SQL語句內使用。DROPFUNCTIONitem_price_range;函數(shù)4-5刪除函數(shù)從SQL表達式調用函數(shù)有以下限制:DRO100
8.4.l利用OEMC創(chuàng)建觸發(fā)器
8.4.2使用SQL命令創(chuàng)建觸發(fā)器8.4觸發(fā)器8.4.l利用OEMC創(chuàng)建觸發(fā)器8.4觸發(fā)器101觸發(fā)器觸發(fā)器是當特定事件出現(xiàn)時自動執(zhí)行的存儲過程特定事件可以是執(zhí)行更新的DML語句和DDL語句觸發(fā)器不能被顯式調用觸發(fā)器的功能:自動生成數(shù)據(jù)自定義復雜的安全權限提供審計和日志記錄啟用復雜的業(yè)務邏輯觸發(fā)器觸發(fā)器是當特定事件出現(xiàn)時自動執(zhí)行的存儲過程102創(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;創(chuàng)建觸發(fā)器的語法CREATE[ORREPLACE]TR103觸發(fā)器的組成部分3-1觸發(fā)器由三部分組成:觸發(fā)器語句(事件)定義激活觸發(fā)器的DML事件和DDL事件觸發(fā)器限制執(zhí)行觸發(fā)器的條件,該條件必須為真才能激活觸發(fā)器觸發(fā)器操作(主體)包含一些SQL語句和代碼,它們在發(fā)出了觸發(fā)器語句且觸發(fā)限制的值為真時運行觸發(fā)器的組成部分3-1觸發(fā)器由三部分組成:104觸發(fā)器的組成部分3-2
SQL>CREATEORREPLACETRIGGERtrig_sal AFTERUPDATEOFempsalONsalary_records
…觸發(fā)器語句為salary_records表創(chuàng)建trig-sal觸發(fā)器在更新emp_sal列之后激活觸發(fā)器觸發(fā)器限制SQL> … FOREACHROW WHEN(NEW.empsal>OLD.empsal) DECLARE Sal_diffNUMBER; … 只有在WHEN子句中的條件得到滿足時,才激活trig_sal觸發(fā)器觸發(fā)器操作SQL>… BEGIN sal_diff:=:NEW.empsal-:OLD.empsal; DBMS_OUTPUT.PUT_LINE(‘工資差額:’sal_diff); END;如果WHEN子句中的條件得到滿足,將執(zhí)行BEGIN塊中的代碼觸發(fā)器的組成部分3-2SQL>CREATEORRE105觸發(fā)器的組成部分3-3Oracle數(shù)據(jù)庫更新表保存更新激活觸發(fā)器AFTER觸發(fā)器的工作原理BEFORE觸發(fā)器的工作原理更新表激活觸發(fā)器保存更新Oracle數(shù)據(jù)庫觸發(fā)器的組成部分3-3Oracle更新表保存更新激活觸發(fā)106創(chuàng)建觸發(fā)器CREATEORREPLACETRIGGERaiu_itemfileAFTERINSERTONitemfileFOREACHROWBEGINIF(:NEW.qty_hand=0)THENDBMS_OUTPUT.PUT_LINE('警告:已插入記錄,但數(shù)量為零');ELSEDBMS_OUTPUT.PUT_LINE(‘已插入記錄');ENDIF;END;/創(chuàng)建觸發(fā)器CREATEORREPLACETRIGGER107觸發(fā)器類型6-1觸發(fā)器的類型有:觸發(fā)器類型模式(DDL)觸發(fā)器DML觸發(fā)器數(shù)據(jù)庫級觸發(fā)器語句級觸發(fā)器行級觸發(fā)器INSTEADOF觸發(fā)器觸發(fā)器類型6-1觸發(fā)器的類型有:觸發(fā)器類型模式(DDL)D108觸發(fā)器類型6-2DDL觸發(fā)器數(shù)據(jù)庫級觸發(fā)器DML觸發(fā)器語句級觸發(fā)器行級觸發(fā)器INSTEADOF觸發(fā)器在模式中執(zhí)行DDL語句時執(zhí)行在發(fā)生打開、關閉、登錄和退出數(shù)據(jù)庫等系統(tǒng)事件時執(zhí)行在對表或視圖執(zhí)行DML語句時執(zhí)行無論受影響的行數(shù)是多少,都只執(zhí)行一次對DML語句修改的每個行執(zhí)行一次用于用戶不能直接使用DML語句修改的視圖觸發(fā)器類型6-2DDL觸發(fā)器在模式中執(zhí)行DDL語句時109觸發(fā)器類型6-3行級觸發(fā)器SQL>CREATETABLETEST_TRG(IDNUMBER,NAMEVARCHAR2(20));SQL>CREATESEQUENCESEQ_TEST;SQL>CREATEORREPLACETRIGGERBI_TEST_TRGBEFOREINSERTORUPDATEOFIDONTEST_TRGFOREACHROWBEGINIFINSERTINGTHENSELECTSEQ_TEST.NEXTVALINTO:NEW.IDFROMDUAL;ELSERAISE_APPLICATION_ERROR(-20020,'不允許更新ID值!');ENDIF;END;/觸發(fā)器類型6-3行級觸發(fā)器SQL>CREATETABL110觸發(fā)器類型6-4SQL>CREATEORREPLACETRIGGERtrgdemoAFTERINSERTORUPDATEORDELETEONorder_masterBEGINIFUPDATINGTHENDBMS_OUTPUT.PUT_LINE(‘已更新ORDER_MASTER中的數(shù)據(jù)');ELSIFDELETINGTHENDBMS_OUTPUT.PUT_LINE(‘已刪除ORDER_MASTER中的數(shù)據(jù)');ELSIFINSERTINGTHENDBMS_OUTPUT.PUT_LINE(‘已在ORDER_MASTER中插入數(shù)據(jù)');ENDIF;END;/語句級觸發(fā)器觸發(fā)器類型6-4SQL>CREATEORREPLAC111觸發(fā)器類型6-5SQL>CREATEORREPLACETRIGGERupd_ord_viewINSTEADOFUPDATEONord_viewFOREACHROWBEGIN UPDATEorder_master SETvencode=:NEW.vencode WHEREorderno=:NEW.orderno; DBMS_OUTPUT.PUT_LINE(‘已激活觸發(fā)器');END;/INSTEADOF觸發(fā)器觸發(fā)器類型6-5SQL>CREATEORREPLAC112觸發(fā)器類型6-6SQL>CREATETABLEdropped_obj(obj_nameVARCHAR2(30),obj_typeVARCHAR2(20),drop_dateDATE);SQL>CREATEORREPLACETRIGGERlog_drop_objAFTERDROPONSCHEMABEGININSERTINTOdropped_objVALUES(ORA_DICT_OBJ_NAME,ORA_DICT_OBJ_TYPE,SYSDATE);END;/模式觸發(fā)器觸發(fā)器類型6-6SQL>CREATETABLEdro113啟用和禁用觸發(fā)器刪除觸發(fā)器啟用、禁用和刪除觸發(fā)器SQL>ALTERTRIGGERaiu_itemfileDISABLE;SQL>ALTERTRIGGERaiu_itemfileENABLE;SQL>DROPTRIGGERaiu_itemfile;啟用和禁用觸發(fā)器啟用、禁用和刪除觸發(fā)器SQL>ALTER114查看有關觸發(fā)器的信息SQL>SELECTTRIGGER_NAMEFROMUSER_TRIGGERSWHERETABLE_NAME='EMP';SQL>SELECTTRIGGER_TYPE,TRIGGERING_EVENT,WHEN_CLAUSEFROMUSER_TRIGGERSWHERETRIGGER_NAME='BIU_EMP_DEPTNO';USER_TRIGGERS數(shù)據(jù)字典視圖包含有關觸發(fā)器的信息查看有關觸發(fā)器的信息SQL>SELECTTRIGGER_115程序包程序包是對相關過程、函數(shù)、變量、游標和異常等對象的封裝程序包由規(guī)范和主體兩部分組成聲明程序包中公共對象。包括類型、變量、常量、異常、游標規(guī)范和子程序規(guī)范等聲明程序包私有對象和實現(xiàn)在包規(guī)范中聲明的子程序和游標程序包規(guī)范主體程序包程序包是對相關過程、函數(shù)、變量、游標和異常等對象的封裝116創(chuàng)建程序包2-1程序包規(guī)范CREATE[ORREPLACE]PACKAGEpackage_nameIS|AS[Publicitemdeclarations][Subprogramspecification]END[package_name];程序包主體CREATE[ORREPLACE]PACKAGEBODYpackage_nameIS|AS[Privateitemdeclarations][Subprogrambodies][BEGINInitialization]END[package_name];創(chuàng)建程序包2-1程序包規(guī)范程序包主體117創(chuàng)建程序包2-2CREATEORREPLACEPACKAGEpack_meISPROCEDUREorder_proc(ornoVARCHAR2);FUNCTIONorder_fun(ornosVARCHAR2)RETURNVARCHAR2;ENDpack_me;/CREATEORREPLACE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人健身教練協(xié)議:訓練計劃與服務承諾(2024版)版B版
- 2025年度測繪儀器研發(fā)信息保密協(xié)議范本3篇
- 萬科室內設計合作標準協(xié)議2024年施行版版
- 二零二五版建筑材料購銷合同范本-供方與需方綠色環(huán)保協(xié)議3篇
- 二零二五版國際金融市場風險管理合作協(xié)議3篇
- 2025年版項目部人員合同協(xié)議書:電子商務項目人員招聘及培訓協(xié)議3篇
- 二零二五年度煤炭資源開發(fā)合作協(xié)議4篇
- 二零二五年新型城鎮(zhèn)化建設項目委托開發(fā)協(xié)議3篇
- 2025年度門窗工程綠色供應鏈管理協(xié)議3篇
- 2024童裝企業(yè)數(shù)字化轉型咨詢合同3篇
- 國家自然科學基金項目申請書
- 電力電纜故障分析報告
- 中國電信網絡資源管理系統(tǒng)介紹
- 2024年浙江首考高考選考技術試卷試題真題(答案詳解)
- 《品牌形象設計》課件
- 倉庫管理基礎知識培訓課件1
- 藥品的收貨與驗收培訓課件
- GH-T 1388-2022 脫水大蒜標準規(guī)范
- 高中英語人教版必修第一二冊語境記單詞清單
- 政府機關保潔服務投標方案(技術方案)
- HIV感染者合并慢性腎病的治療指南
評論
0/150
提交評論