oracle package

oracle package

oracle package是oracle包,是一組相關過程、函式、變數、常量#SinaEditor_Temp_FontName、類型和游標等PL/SQL程式設計元素的組合。包具有面向對象設計的特點,是對這些PL/SQL程式設計元素的封裝。

基本介紹

  • 中文名:oracle package
  • 公司:oracle 公司
  • 定義:相關過程、函式、變數、常量
  • 語言:英語
(1)包package聲明或定義:包定義部分是創建包的規範說明,聲明包內數據類型、變數、常量、游標等元素。
這部分也是為使用者提供了透明的接口。
(2)包體packpage body:包體是包定義部分的具體實現。
(3)將有聯繫的對象打成包,方便使用
(4)包中對象包括儲存過程,函式,游標,自定義類型和變數,可以在PL_SQL塊中套用這些對象.
定義包頭:
create or replace package<Package_name>istype<TypeName>is<Datatype>;--定義類型--Publicconstantdeclarations<ConstantName>constant<Datatype>:=<Value>;--聲明常量--Publicvariabledeclarations<VariableName><Datatype>;--數據類型--Publicfunctionandproceduredeclarationsfunction<FunctionName>(<Parameter><Datatype>)return<Datatype>;--函式end<Package_name>;定義包體:--create or replace packagebody<Package_name>is--Privatetypedeclarationstype<TypeName>is<Datatype>;--Privateconstantdeclarations<ConstantName>constant<Datatype>:=<Value>--Privatevariabledeclarations<VariableName><Datatype>;--Functionandprocedureimplementationsfunction<FunctionName>(<Parameter><Datatype>)return<Datatype>is--函式的具體內容<LocalVariable><Datatype>;begin<Statement>;return(<Result>);end;begin--Initialization--初始化包體,每次調用時被初始化<Statement>;end<Package_name>;
只有當包頭編輯成功後才能編輯包體.其中的函式名與過程名須和包頭中的函式過程一樣.
1 包說明和包體必須有相同的名字
2 包的開始沒有begin語句,與存儲過程和函式不同。
3 在包的說明部分定義函式和過程的名稱和參數,具體實現在包體中定義。
4 在包內聲明常量、變數、類型定義、異常、及游標時不使用declare。
5 包內的過程和函式的定義不要create or replace語句。
6 包聲明和包體兩者分離。
包頭(Package)與包體(Package body)的套用
包的作用: 根據出生年月返回年齡function Getage,返回工資function Getsalary
--創建環境CreateTableT_PsnSalary--工資表(Fpsncodevarchar(4)default'',--個人代碼Fpsndescvarchar(20)default'',--描述FpsnBirthvarchar(20)default'',--生日FpsnSalarynumber(8,2)--工資);--添加數據InsertintoT_PsnSalary(Fpsncode,Fpsndesc,FpsnBirth,FpsnSalary)Values('C001','張三','1986.01.10',1100);InsertintoT_PsnSalary(Fpsncode,Fpsndesc,FpsnBirth,FpsnSalary)Values('C002','李四','1980.10.10',3000);InsertintoT_PsnSalary(Fpsncode,Fpsndesc,FpsnBirth,FpsnSalary)Values('C003','王五','1996.12.10',800);commit;--創建包頭createorreplacepackagepackage_demoisfunctionGetage(birthstvarchar,birthendvarchar)returninteger;functionGetsalary(VFpsncodevarchar)returnnumber;endpackage_demo;--創建包體createorreplacepackagebodypackage_demoisfunctionGetage(birthstvarchar,birthendvarchar)returninteger--得到年齡函式isV_birthinteger;ToDateEndDate;Toyearnumber(4);Tomonthnumber(4);Fromyearnumber(4);Frommonthnumber(4);beginif(birthend='')or(birthendisnull)thenselectsysdateintoToDateEndfromdual;--得到系統時間endif;Toyear:=to_number(to_char(ToDateEnd,'YYYY'));--得到最後年月Tomonth:=to_number(to_char(ToDateEnd,'MM'));Fromyear:=to_number(substr(birthst,1,4));--計算的年月Frommonth:=to_number(substr(birthst,6,2));ifTomonth-Frommonth>0thenV_birth:=Toyear-fromyear;elseV_birth:=Toyear-fromyear-1;endif;return(V_birth);endGetage;functiongetSalary(VFpsncodevarchar)returnnumber--返回工資情況isV_psnSalarynumber(8,2);beginSelectFpsnSalaryintoV_psnSalaryfromT_PsnSalarywhereFpsncode=VFpsncode;return(V_psnSalary);endgetSalary;endpackage_demo;selecta.*,package_demo.Getage(Fpsnbirth,'')agefromT_psnsalarya;--調用包得到年齡功能selectpackage_demo.getsalary('C001')fromdual;--代碼得到工資

相關詞條

熱門詞條

聯絡我們