標籤:
本系列連結導航:
[獨孤九劍]Oracle知識點梳理(一)資料表空間、使用者
[獨孤九劍]Oracle知識點梳理(二)資料庫的串連
[獨孤九劍]Oracle知識點梳理(三)匯入、匯出
[獨孤九劍]Oracle知識點梳理(四)SQL語句之DML和DDL
[獨孤九劍]Oracle知識點梳理(五)資料庫常用對象之Table、View
[獨孤九劍]Oracle知識點梳理(六)資料庫常用對象之Procedure、function、Sequence
[獨孤九劍]Oracle知識點梳理(七)資料庫常用對象之Cursor
[獨孤九劍]Oracle知識點梳理(八)常見Exception
[獨孤九劍]Oracle知識點梳理(九)資料庫常用對象之package
[獨孤九劍]Oracle知識點梳理(十)%type與%rowtype及常用函數
5.8、package的操作
包(package),是一組相關過程、函數、變數、常量#SinaEditor_Temp_FontName、類型和遊標等PL/SQL程式設計項目的組合。
包具有物件導向設計的特點,是對這些PL/SQL程式設計項目的封裝。一個包由兩個分開的部分組成:
- 包package聲明或定義(也叫包頭):包定義部分是建立包的規範說明,聲明包內資料類型、變數、常量、遊標等元素。只有在包頭中聲明後,才能在外部調用。
- 包體packpage body:包體是包定義部分的具體實現。
- 包中對象包括儲存過程,函數,遊標,自訂類型和變數,可以在PL_SQL塊中應用這些對象.
注意:
a) 包頭與包體的名字必須相同;
b) 包頭與包體定義時,開始沒有begin關鍵字,與預存程序和函數不同。
c) 在包頭裡聲明儲存過程,函數,遊標,自訂類型和變數等,在包體中實現。
d) 在包內聲明常量、變數、類型定義、異常、及遊標時不使用declare。
e) 包內的過程和函數的定義不要create or replace語句。
f) 包聲明和包體兩者分離。
5.8.1、定義package
1 create or replace package pkg_person2 is3 Type refTable is ref cursor;4 function fun_GetPersonName(argName in varchar2,argGender out varchar2) return varchar2;5 procedure proc_GetPersonList(argName in varchar2,argGender in varchar2,argResult out refTable);6 end pkg_person;
1 create or replace package pkg_person 2 is 3 function fun_GetPersonName(argName in varchar2,argGender out varchar2) return varchar2 4 as 5 Result person.name%TYPE; 6 begin 7 select name,gender into Result,argGender from person where name=argName and rownum=1; 8 return Result;--傳回值 9 end fun_GetPersonName;10 11 procedure proc_GetPersonList(argName in varchar2,argMsg out varchar2,argResult out refTable)12 as 13 vName varchar2(64);-- 定義變數,要設定長度 14 begin15 vName:=argName; --賦值,每條語句要以分號結束16 open argResult is select * from person where name like vName||‘%‘;--將查詢結果記錄到返回遊標中17 --當然,還可以進行其他複雜的判斷,轉換等操作18 argMsg:=‘正常‘;19 commit;20 21 Exception22 when others then argMsg=‘異常‘;23 rollback; --如果之前執行的是事務性的語句,有必要保證資料安全24 25 end proc_GetPersonList;26 27 end pkg_person;
[獨孤九劍]Oracle知識點梳理(九)資料庫常用對象之常見package