包是一組相關過程、函數、變量、常量和遊標等pl/sql程序設計元素的組合。
sql
與類同樣,包中的程序元素分爲公用元素和私用元素。公用元素能夠被包中的函數、過程調用,也能夠被包外的pl/sql程序訪問;而私有元素只能被包內的函數和過程訪問。數據庫
在pl/sql程序設計中,使用包能夠提升程序的執行效率。由於程序首次調用包內函數或過程時,oracle須要將整個包調入內存;當再次訪問包內元素時,oracle直接從內存中讀取,而不須要進行磁盤i/o操做,從而提升程序的執行效率。
oracle
1. 一個包由兩個分開的部分組成:函數
1>包定義:包定義部分聲明瞭包內數據類型、變量、常量、遊標、子程序和異常錯誤處理等,這些元素爲包的公有元素。設計
2>包主體:包主體是包定義部分的具體實現,它實現了包定義部分所聲明的遊標和子程序,在包主體中還能夠聲明包的私有元素。
code
包定義和包主體分開編譯,並做爲兩部分分開的對象存放在數據庫字典中。
對象
2. 包的定義內存
create or replace package demo_pakage isget
--公有數據類型定義io
--公有遊標聲明
--公有變量聲明
--公有子程序聲明
end demo_pakage;
create or replace package demo_package is --公有變量 v_consump t_consumption%rowtype; --子程序函數 function getallsalary(cstmId number) return number; --子程序存儲過程 procedure sp_checkaccount(account in char,errNo out integer); end demo_package;
3.子程序重載
pl/sql容許對包內子程序和本地子程序進行重載。所謂重載是指兩個或多個子程序具備相同的名稱,但擁有不一樣的參數變量、參數順序或參數數據類型。