版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第三章:包
包(package)是一個(gè)可以將相關(guān)對(duì)象存儲(chǔ)在一起的PL/SQL結(jié)構(gòu)。包包含了兩個(gè)分離的部件------包說明(specification)和包主體(body)。每個(gè)部件都單獨(dú)被存儲(chǔ)在數(shù)據(jù)字典中。包只能存儲(chǔ)在數(shù)據(jù)庫中,不能是本地的。除了可以將相關(guān)對(duì)象作為一組存在一起以外,包也是十分有用的,因?yàn)樗鼈冊(cè)谝蕾囆苑矫娴南拗剖潜容^小的。也有許多性能上的優(yōu)點(diǎn)。
1.包的組成
將相關(guān)的若干程序結(jié)構(gòu)組織到一塊,用一個(gè)包來標(biāo)識(shí)這個(gè)集合。
程序單元描述____________________________________________________過程(procedure)帶有參數(shù)的程序函數(shù)(Function)帶有參數(shù)的程序,該程序只返回一個(gè)值變量(Variable)用于存儲(chǔ)變化值的存儲(chǔ)單元游標(biāo)(Cursor)指向一個(gè)SQL語句的指針常量(Constant)指向常數(shù)的指針異常情況(Exception)標(biāo)志一個(gè)異常情況包說明是操作接口,對(duì)應(yīng)用可見;包主體是黑盒,對(duì)應(yīng)用隱藏實(shí)現(xiàn)細(xì)節(jié)包由說明部分和包主體兩部分組成,在包的說明部分說明的元素(過程、函數(shù)等)是公共元素,只在包主體中說明的元素是私有元素。
元素的性質(zhì)描述在包中的位置
公共的(public)在整個(gè)應(yīng)用的全過包的說明部分說明,程均有效并在包主體中具體定義它私有的(private)對(duì)包以外的過程和在包主體部分說明函數(shù)是不可見的和定義局部的只在一個(gè)過程或函在所屬過程或函數(shù)的數(shù)內(nèi)部可用內(nèi)部說明和定義
注釋:
●程序(過程、函數(shù))可以是公共的或私有的?!駱?biāo)識(shí)符(變量、游標(biāo)、常量、異常處理)可以是公共、私有或局部的。
在包說明部分說明的所有對(duì)象在包的外面都是可用的并且是可見的。只需指定該包的名字就可以訪問該對(duì)象了。
2.開發(fā)包
按下述步驟開發(fā)一個(gè)包,注意這和過程的開發(fā)相似。
●在一個(gè)文本文件中寫入CREATEPACKAGE語句以說明一個(gè)包?!裼肅REATEPACKAGEBODY語句創(chuàng)建包體。
●在SQL*plus或SVRMGR中運(yùn)行這兩個(gè)文本文件,以將包的源代碼編譯成編譯代碼(P-Code),并將這兩種代碼存人數(shù)據(jù)庫中?!駨腛RACLE環(huán)境,或者從一個(gè)獨(dú)立的函數(shù)或過程調(diào)用一個(gè)包內(nèi)的公共元素。注釋:
●也可將CREATEPACKAGE語句和CREATEPACKAGEBODY語句寫入同一個(gè)文本文件中?!飫?chuàng)建包說明的語法:
CREATE[ORREPLACE]PACKAGE[模式名.]包名{IS|AS}PL/SQL塊包說明
例1:
CREATEORREPLACEPACKAGEemp_actionsASPROCEDUREhire_employee(enameCHAR...);PROCEDUREfire_employee(emp_idNUMBER...);FUNCTION…ENDemp_actions;/例2:制作一個(gè)包說明
生成一個(gè)管理雇員薪水的包,其中包括一個(gè)為雇員加薪的過程,并且在包中還有一個(gè)記錄所有雇員薪水增量的全局變量。
CREATEPACKAGEsal_packageISPROCEDUREraise_sal(v_empnoemp.empno%TYPE,v_sal_incrementemp.sal%TYPE);v_delta_salemp.sal%TYPE;ENDsal_packages;
★創(chuàng)建包主體的語法:
CREATE[ORREPLACE]PACKAGEBODY[模式名.]包名{IS|AS}PL/SQL包說明
例:
CREATEORREPLACEPACKAGEBODYemp_actionsASPROCEDUREhire_employee(enameCHAR...)BEGIN過程語句ENDhire_employee;PROCEDUREfire_employee(emp_idNUMBER...)BEGIN過程語句ENDhire_employee;ENDemp_actions;/在創(chuàng)建公共過程時(shí)使用私有過程可以使代碼模塊化和清晰化??梢栽诎黧w的開始定義一個(gè)私有過程,以初始化所有全局變量。
例子:制作一個(gè)包體。
創(chuàng)建一個(gè)私有函數(shù)以簡化過程RAISE_SAL的代碼,同時(shí)創(chuàng)建一個(gè)用來初始化全局變量V_DELTA_SAL的過程。CREATEPACKAGEBODYsal_paCkageIS
FUNCTIONget_sal(v_empnoemp.empno%type)ReturnnumberIsV_empsalemp.sal%type:=0;BeginSelectsalIntov_empsalFromempWhereempno=v_empno;Return(v_empsal);End;
PROCEDUREraise_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;/注釋:
●包中NUMBER型變量缺省初始化值為0,VARCHAR2型變量缺省初始化值為空。
注意:包說明部分是必需的,而包主體部分是可選的。過程和函數(shù)的說明在包說明和包主體部分應(yīng)該是相同的。包括過程、函數(shù)的名字、參數(shù)的名字以及參數(shù)的模式。
3.包的管理
包的存儲(chǔ)和一個(gè)單獨(dú)的過程存儲(chǔ)一樣。
內(nèi)容命令創(chuàng)建一個(gè)新的包說明信息CREATEPACKAGE創(chuàng)建一個(gè)新的包主體CREATEPACKAGEBODY修改一個(gè)已有的包的說明CREATEORREPLACEPACKAGE修改一個(gè)已有的包主體CREATEORREPLACEPACKAGEBODY刪除包的說明和包主體DROPPACKAGE刪除包主體DROPPACKAGEBODY注釋:
●當(dāng)包的說明被刪除或修改時(shí),一般要求把包主體也刪除或做相應(yīng)修改?!癞?dāng)刪除或修改包主體時(shí),可以不刪除或修改包的說明。
在管理包時(shí),整個(gè)包(包括其中所有的元素)是作為一個(gè)邏輯單元進(jìn)行管理的,其管理命令和方法都與管理單個(gè)過程相同。
任務(wù)包獨(dú)立過程文檔記錄在數(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ì)過程有EXECUTE實(shí)體特權(quán)實(shí)體特權(quán)注釋:
●用DBMS_OUTPUT系統(tǒng)包中的過程來調(diào)試包中的過程。4.包的調(diào)用
●從另一個(gè)存儲(chǔ)子程序調(diào)用emp_actions.hire_employee(name…);●從ORACLE工具中調(diào)用SQL>EXECUTEemp_actions.hire_employ(…);●
遠(yuǎn)程存?。喊?過程名@DB鏈路名例子:調(diào)用一個(gè)公共過程。給7654號(hào)雇員加薪$100。
SQL>EXECUTEsal_package.raise_sal(7654,100);
注釋:●利用包名可以使一個(gè)用戶的兩個(gè)不同過程有相同的名字。在一個(gè)用戶對(duì)話中可以從任何獨(dú)立過程中引用包中的公共變量、游標(biāo)、常量和異常情況。
例子:調(diào)用包中的變量。當(dāng)某部門整個(gè)薪水的變化超過予算的,發(fā)一條警告信息。
CREATEPROCEDUREwarn_sal(v_sal_budgetINemp.sal%TYPE)ISBEGINIFsal_package.v_delta_sal>v_sal_budgetTHENRAISE_APPLICATION_ERROR(-20400,
‘Salarybudgetexceeded.’);ENDIF;ENDwarn_sal;
注釋:●引用包中的變量時(shí),在它前面加上包的名字。5.包的依賴性
與獨(dú)立過程一樣,盡管包也有自動(dòng)管理本地依賴性和遠(yuǎn)程依賴性的機(jī)制,但仍建議用戶對(duì)那些無效的包進(jìn)行手動(dòng)地重新編譯。任務(wù)包獨(dú)立過程記錄文檔在數(shù)據(jù)字典的在數(shù)據(jù)字典的DEPENDENCIESDEPENDENCIES視圖里視圖里
手動(dòng)重新編譯用ALTERPACKAGE用ALTER命令PROCEDURE命令
自動(dòng)重新編譯取決地本地、遠(yuǎn)程依取決于本地、遠(yuǎn)程依賴性的自動(dòng)管理機(jī)制賴的自動(dòng)管理機(jī)制★語法——重新編譯包體和包說明的定義
ALTERPACKAGE—packagename—COMPILEPACKAGE
★語法——重新編譯包體
ALTERPACKAGE—packagename—COMPILEPACKAGEBODY
其中:packagename指包的名字注釋:
●當(dāng)重新編譯包說明的定義時(shí),必須對(duì)包體重新編譯?!癞?dāng)只重新編譯包體時(shí),不一定要重編譯包說明的定義?!?/p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度城市照明工程承包服務(wù)合同3篇
- 2025年度幼兒園窗戶安全改造及責(zé)任認(rèn)定合同4篇
- 2024年綜合安防系統(tǒng)集成服務(wù)合同
- 2025年度商業(yè)場(chǎng)所蟲害防治與形象維護(hù)服務(wù)合同4篇
- 2025年度生態(tài)園區(qū)代建工程合同模板4篇
- 2025年度殯儀館遺體運(yùn)輸與悼念活動(dòng)全程服務(wù)合同書3篇
- 2024年版婚內(nèi)共同財(cái)產(chǎn)管理及使用合同
- 2025年度新能源儲(chǔ)能項(xiàng)目搭建與銷售合同4篇
- 2025年度化工企業(yè)環(huán)境風(fēng)險(xiǎn)防控合同3篇
- 2025年度大豆國際貿(mào)易結(jié)算與清算服務(wù)合同3篇
- 直播帶貨助農(nóng)現(xiàn)狀及發(fā)展對(duì)策研究-以抖音直播為例(開題)
- 腰椎間盤突出疑難病例討論
- 《光伏發(fā)電工程工程量清單計(jì)價(jià)規(guī)范》
- 2023-2024學(xué)年度人教版四年級(jí)語文上冊(cè)寒假作業(yè)
- (完整版)保證藥品信息來源合法、真實(shí)、安全的管理措施、情況說明及相關(guān)證明
- 營銷專員績效考核指標(biāo)
- 陜西麟游風(fēng)電吊裝方案專家論證版
- 供應(yīng)商審核培訓(xùn)教程
- 【盒馬鮮生生鮮類產(chǎn)品配送服務(wù)問題及優(yōu)化建議分析10000字(論文)】
- 肝硬化心衰患者的護(hù)理查房課件
- 2023年四川省樂山市中考數(shù)學(xué)試卷
評(píng)論
0/150
提交評(píng)論