轉自:http://www.iteye.com/topic/1111793
一、包的概念
類似於一個容器,能打包相應的Pl/SQL變量、常量、函數、過程、復合數據類型等元素到這個容器內。用來限制
對這些內容的訪問權限。
二、包的構成。
包通常由兩部分組成,分別為包頭和包體 。
包頭:里面通常寫上述元素的聲明,相當於應用程序的接口。
包體:里面通常寫上述元素的實現,相當於應用程序的具體實現。
包頭和包體分別作為數據庫對象被保存在數據庫內。
三、包的特性
1、包本身不能被調用,被參數化,只能調用包中的具體元素。
2、當第一次調用一個包中的元素時,整個包被載入內存,下一次再調用包中的相應元素時,省略了磁盤操作。
3、用戶只能訪問包頭,而不能訪問包體。
4、包頭可以在沒有包體的情況下單獨存在,而包體不可以。
四、公有元素、私有元素和局部元素。
公有元素:只要在包頭中聲明的元素,即為公有元素,在包的外部都可以訪問得到。
私有元素:在包體中出現而包頭中沒有出現的元素,即為私有元素,在包的外部訪問不到。
局部元素:在包體的某一個過程或者函數中聲明的元素,即為局部元素,只能在包體的這個過程和函數中使用。
五、如何編輯一個包。
1、new Sql-window
2、new program-window ->Package
3、new command-window
六、創建包的語法
1、創建包頭:
Create Or Replace Package 包名 is|As
公有元素的聲明;
pl/sql塊
2、創建包體:
Create Or Replace Package Body 包名 is|As
私有元素的聲明
公有元素的實現;
pl/sql塊
七、包的調用
和以前調用方式的區別是:在調用的元素名前面加上 '包名.'
八、包的特性:
1、無體包:只有包頭沒有包體的包。通常只寫常量的聲明。
2、包的重載特性:在同一個包里,函數或過程名相同,參數列表不同。
3、包的前向聲明:
九、刪除包
刪除包頭:
Drop Package 包名;--包頭和包體都被刪除
刪除包體
Drop Package Body 包名; --只刪除包體。
當修改包頭時,包頭和包體需要全部重新編譯,如果只修改包體,包頭不需要重新編譯。
十、動態SQL:在運行期間才能明確下來操作的是哪個數據庫對象.
靜態SQL:在編譯之前就已經明確操作的是哪個數據庫對象。
十一、本地動態SQL:
Execute Immediate '動態SQL' [Into 變量列表] [Using 參數列表];
變量列表:用來做Select語句賦值的。、
參數列表:用來填充SQL中參數的。