




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三章:包
包(package)是一個(gè)可以將相關(guān)對(duì)象存儲(chǔ)在一起的PL/SQL結(jié)構(gòu)。包包含了兩個(gè)分離的部件------包說(shuō)明(specification)和包主體(body)。每個(gè)部件都單獨(dú)被存儲(chǔ)在數(shù)據(jù)字典中。包只能存儲(chǔ)在數(shù)據(jù)庫(kù)中,不能是本地的。除了可以將相關(guān)對(duì)象作為一組存在一起以外,包也是十分有用的,因?yàn)樗鼈冊(cè)谝蕾囆苑矫娴南拗剖潜容^小的。也有許多性能上的優(yōu)點(diǎn)。
第三章:包11.包的組成
將相關(guān)的若干程序結(jié)構(gòu)組織到一塊,用一個(gè)包來(lái)標(biāo)識(shí)這個(gè)集合。
程序單元描述____________________________________________________過(guò)程(procedure)帶有參數(shù)的程序函數(shù)(Function)帶有參數(shù)的程序,該程序只返回一個(gè)值變量(Variable)用于存儲(chǔ)變化值的存儲(chǔ)單元游標(biāo)(Cursor)指向一個(gè)SQL語(yǔ)句的指針常量(Constant)指向常數(shù)的指針異常情況(Exception)標(biāo)志一個(gè)異常情況1.包的組成2包說(shuō)明是操作接口,對(duì)應(yīng)用可見;包主體是黑盒,對(duì)應(yīng)用隱藏實(shí)現(xiàn)細(xì)節(jié)包說(shuō)明是操作接口,對(duì)應(yīng)用可見;包主體是黑盒,3包由說(shuō)明部分和包主體兩部分組成,在包的說(shuō)明部分說(shuō)明的元素(過(guò)程、函數(shù)等)是公共元素,只在包主體中說(shuō)明的元素是私有元素。
元素的性質(zhì)描述在包中的位置
公共的(public)在整個(gè)應(yīng)用的全過(guò)包的說(shuō)明部分說(shuō)明,程均有效并在包主體中具體定義它私有的(private)對(duì)包以外的過(guò)程和在包主體部分說(shuō)明函數(shù)是不可見的和定義局部的只在一個(gè)過(guò)程或函在所屬過(guò)程或函數(shù)的數(shù)內(nèi)部可用內(nèi)部說(shuō)明和定義
包由說(shuō)明部分和包主體兩部分組成,在包的說(shuō)明部4注釋:
●程序(過(guò)程、函數(shù))可以是公共的或私有的。●標(biāo)識(shí)符(變量、游標(biāo)、常量、異常處理)可以是公共、私有或局部的。
在包說(shuō)明部分說(shuō)明的所有對(duì)象在包的外面都是可用的并且是可見的。只需指定該包的名字就可以訪問(wèn)該對(duì)象了。
注釋:5包包package是一個(gè)可以將相關(guān)對(duì)象存儲(chǔ)在一課件62.開發(fā)包
按下述步驟開發(fā)一個(gè)包,注意這和過(guò)程的開發(fā)相似。
●在一個(gè)文本文件中寫入CREATEPACKAGE語(yǔ)句以說(shuō)明一個(gè)包。●用CREATEPACKAGEBODY語(yǔ)句創(chuàng)建包體。
●在SQL*plus或SVRMGR中運(yùn)行這兩個(gè)文本文件,以將包的源代碼編譯成編譯代碼(P-Code),并將這兩種代碼存人數(shù)據(jù)庫(kù)中?!駨腛RACLE環(huán)境,或者從一個(gè)獨(dú)立的函數(shù)或過(guò)程調(diào)用一個(gè)包內(nèi)的公共元素。2.開發(fā)包7注釋:
●也可將CREATEPACKAGE語(yǔ)句和CREATEPACKAGEBODY語(yǔ)句寫入同一個(gè)文本文件中。注釋:8包包package是一個(gè)可以將相關(guān)對(duì)象存儲(chǔ)在一課件9★創(chuàng)建包說(shuō)明的語(yǔ)法:
CREATE[ORREPLACE]PACKAGE[模式名.]包名{IS|AS}PL/SQL塊包說(shuō)明
例1:
CREATEORREPLACEPACKAGEemp_actionsASPROCEDUREhire_employee(enameCHAR...);PROCEDUREfire_employee(emp_idNUMBER...);FUNCTION…ENDemp_actions;/★創(chuàng)建包說(shuō)明的語(yǔ)法:10例2:制作一個(gè)包說(shuō)明
生成一個(gè)管理雇員薪水的包,其中包括一個(gè)為雇員加薪的過(guò)程,并且在包中還有一個(gè)記錄所有雇員薪水增量的全局變量。
CREATEPACKAGEsal_packageISPROCEDUREraise_sal(v_empnoemp.empno%TYPE,v_sal_incrementemp.sal%TYPE);v_delta_salemp.sal%TYPE;ENDsal_packages;
例2:制作一個(gè)包說(shuō)明CREATEPACKAGEsal11
★創(chuàng)建包主體的語(yǔ)法:
CREATE[ORREPLACE]PACKAGEBODY[模式名.]包名{IS|AS}PL/SQL包說(shuō)明
12例:
CREATEORREPLACEPACKAGEBODYemp_actionsASPROCEDUREhire_employee(enameCHAR...)BEGIN過(guò)程語(yǔ)句ENDhire_employee;PROCEDUREfire_employee(emp_idNUMBER...)BEGIN過(guò)程語(yǔ)句ENDhire_employee;ENDemp_actions;/例:13在創(chuàng)建公共過(guò)程時(shí)使用私有過(guò)程可以使代碼模塊化和清晰化??梢栽诎黧w的開始定義一個(gè)私有過(guò)程,以初始化所有全局變量。
例子:制作一個(gè)包體。
創(chuàng)建一個(gè)私有函數(shù)以簡(jiǎn)化過(guò)程RAISE_SAL的代碼,同時(shí)創(chuàng)建一個(gè)用來(lái)初始化全局變量V_DELTA_SAL的過(guò)程。在創(chuàng)建公共過(guò)程時(shí)使用私有過(guò)程可以使代碼模塊化14CREATEPACKAGEBODYsal_paCkageIS
FUNCTIONget_sal(v_empnoemp.empno%type)ReturnnumberIsV_empsalemp.sal%type:=0;BeginSelectsalIntov_empsalFromempWhereempno=v_empno;Return(v_empsal);End;
CREATEPACKAGEBODYsal_paCkag15PROCEDUREraise_sal(v_empnoemp.empno%TYPE,v_sal_incrementemp.sal%TYPE)ISv_old_salemp.sal%TYPE;BEGINv_old_sal:=get_sal(v_empno);UPDATEempSETsal=sal十v_sal_incrementWHEREempno=v_empno;COMMITWORK;v_delta_sal:=v_delta_sal十v_sal_incrernent;ENDraise_sal;
ENDsal_package;/PROCEDUREraise_sal(v_empno16注釋:
●包中NUMBER型變量缺省初始化值為0,VARCHAR2型變量缺省初始化值為空。
注意:包說(shuō)明部分是必需的,而包主體部分是可選的。過(guò)程和函數(shù)的說(shuō)明在包說(shuō)明和包主體部分應(yīng)該是相同的。包括過(guò)程、函數(shù)的名字、參數(shù)的名字以及參數(shù)的模式。
注釋:173.包的管理
包的存儲(chǔ)和一個(gè)單獨(dú)的過(guò)程存儲(chǔ)一樣。
內(nèi)容命令創(chuàng)建一個(gè)新的包說(shuō)明信息CREATEPACKAGE創(chuàng)建一個(gè)新的包主體CREATEPACKAGEBODY修改一個(gè)已有的包的說(shuō)明CREATEORREPLACEPACKAGE修改一個(gè)已有的包主體CREATEORREPLACEPACKAGEBODY刪除包的說(shuō)明和包主體DROPPACKAGE刪除包主體DROPPACKAGEBODY3.包的管理18注釋:
●當(dāng)包的說(shuō)明被刪除或修改時(shí),一般要求把包主體也刪除或做相應(yīng)修改?!癞?dāng)刪除或修改包主體時(shí),可以不刪除或修改包的說(shuō)明。
在管理包時(shí),整個(gè)包(包括其中所有的元素)是作為一個(gè)邏輯單元進(jìn)行管理的,其管理命令和方法都與管理單個(gè)過(guò)程相同。
注釋:19任務(wù)包獨(dú)立過(guò)程文檔記錄在數(shù)據(jù)字典視圖在數(shù)據(jù)字典視圖USER_SOURCE中USER_SOURCE中檢查編譯錯(cuò)誤在數(shù)據(jù)字典視圖在數(shù)據(jù)字典視圖USER_ERRORS中USER_ERRORS中開發(fā)方法利用SQL*Plus利用SQL*Plus批文件批文件開發(fā)權(quán)限需要CREATE需要CREATEPROCEDUREPROCEDURE系統(tǒng)權(quán)限系統(tǒng)權(quán)限
使用權(quán)限需要對(duì)包有EXECUTE需要對(duì)過(guò)程有EXECUTE實(shí)體特權(quán)實(shí)體特權(quán)任務(wù)20注釋:
●用DBMS_OUTPUT系統(tǒng)包中的過(guò)程來(lái)調(diào)試包中的過(guò)程。注釋:214.包的調(diào)用
●從另一個(gè)存儲(chǔ)子程序調(diào)用emp_actions.hire_employee(name…);●從ORACLE工具中調(diào)用SQL>EXECUTEemp_actions.hire_employ(…);●
遠(yuǎn)程存取:包名.過(guò)程名@DB鏈路名4.包的調(diào)用22例子:調(diào)用一個(gè)公共過(guò)程。給7654號(hào)雇員加薪$100。
SQL>EXECUTEsal_package.raise_sal(7654,100);
注釋:●利用包名可以使一個(gè)用戶的兩個(gè)不同過(guò)程有相同的名字。在一個(gè)用戶對(duì)話中可以從任何獨(dú)立過(guò)程中引用包中的公共變量、游標(biāo)、常量和異常情況。例子:調(diào)用一個(gè)公共過(guò)程。給7654號(hào)雇員加薪$100。SQ23
例子:調(diào)用包中的變量。當(dāng)某部門整個(gè)薪水的變化超過(guò)予算的,發(fā)一條警告信息。
CREATEPROCEDUREwarn_sal(v_sal_budgetINemp.sal%TYPE)ISBEGINIFsal_package.v_delta_sal>v_sal_budgetTHENRAISE_APPLICATION_ERROR(-20400,
‘Salarybudgetexceeded.’);ENDIF;ENDwarn_sal;
注釋:●引用包中的變量時(shí),在它前面加上包的名字。
CREATEPROCEDUREwarn_sal(v_s245.包的依賴性
與獨(dú)立過(guò)程一樣,盡管包也有自動(dòng)管理本地依賴性和遠(yuǎn)程依賴性的機(jī)制,但仍建議用戶對(duì)那些無(wú)效的包進(jìn)行手動(dòng)地重新編譯。5.包的依賴性25任務(wù)包獨(dú)立過(guò)程記錄文檔在數(shù)據(jù)字典的在數(shù)據(jù)字典的DEPENDENCIESDEPENDENCIES視圖里視圖里
手動(dòng)重新編譯用ALTERPACKAGE用ALTER命令PROCEDURE命令
自動(dòng)重新編譯取決地本地、遠(yuǎn)程依取決于本地、遠(yuǎn)程依賴性的自動(dòng)管理機(jī)制賴的自動(dòng)管理機(jī)制任務(wù)26★語(yǔ)法——重新編譯包體和包說(shuō)明的定義
ALTERPACKAGE—packagename—COMPILEPACKAGE
★語(yǔ)法——重新編譯包體
ALTERPACKAGE—packagename—COMPILEPACKAGEBODY
其中:packagename指包的名字★語(yǔ)法——重新編譯包體和包說(shuō)明的定義ALTERPACKA27注釋:
●當(dāng)重新編譯包說(shuō)明的定義時(shí),必須對(duì)包體重新編譯。●當(dāng)只重新編譯包體時(shí),不一定要重編譯包說(shuō)明的定義。注釋:28★在獨(dú)立過(guò)程中使用包中的元素
如果只改變包主體的定義,而不改變包的說(shuō)明的定義,那么不影響包主體外的獨(dú)立過(guò)程的有效性。
如果改變對(duì)包主體說(shuō)明的定義,則包主體和包外的過(guò)程都將是無(wú)效的,因?yàn)樗鼈兌家蕾囉趯?duì)包主體說(shuō)明的定義?!镌讵?dú)立過(guò)程中使用
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 國(guó)有土地開發(fā)建設(shè)合同范文
- 國(guó)際商標(biāo)使用權(quán)轉(zhuǎn)讓合同標(biāo)準(zhǔn)格式
- 合資成立分公司合同書
- 成都市房屋租賃簡(jiǎn)易合同模板
- 項(xiàng)目出資合同模板
- 水產(chǎn)養(yǎng)殖基地建設(shè)承包合同范本
- 建筑工程施工合同樣本(律師審核版)
- 訴訟離婚合同范本
- 廣播電視設(shè)備智能生物藥品臨床應(yīng)用技術(shù)考核試卷
- 信息技術(shù)創(chuàng)新與數(shù)字化轉(zhuǎn)型考核試卷
- 新能源汽車驅(qū)動(dòng)電機(jī)及控制系統(tǒng)檢修教案 學(xué)習(xí)情境 1:驅(qū)動(dòng)電機(jī)的認(rèn)知
- 湖北省黃岡市2023-2024學(xué)年五年級(jí)上學(xué)期數(shù)學(xué)期中試卷(含答案)
- 小組合作學(xué)習(xí)組內(nèi)分工及職責(zé)
- GB/T 44351-2024退化林修復(fù)技術(shù)規(guī)程
- ××管業(yè)分銷市場(chǎng)操作方案
- 《ISO 41001-2018 設(shè)施管理- 管理體系 要求及使用指南》專業(yè)解讀與應(yīng)用指導(dǎo)材料之15:“7支持-7.6 組織知識(shí)”(雷澤佳編制-2024)
- 2024年建設(shè)工程質(zhì)量檢測(cè)人員-建設(shè)工程質(zhì)量檢測(cè)人員(主體結(jié)構(gòu)工程)考試近5年真題集錦(頻考類試題)帶答案
- 《向量共線定理》同步課件
- 小學(xué)數(shù)學(xué)學(xué)習(xí)經(jīng)驗(yàn)交流課件
- 2024年第二批政府專職消防員招錄報(bào)名表
- 2024年初級(jí)消防員職業(yè)技能鑒定考試復(fù)習(xí)題庫(kù)(單選、多選題)
評(píng)論
0/150
提交評(píng)論