包
打包了相關的PL/SQL類型、子程序到一個容器中。
兩個部分組成:
- 聲明
- 體
注意:
- 包本身不能被調用、被參數化或被嵌套
- 允許Oracle服務器一次讀多個對象到內存中
- 用戶只能訪問程序包的包頭部分,包體被隱藏
可以考慮成一個類,和麪向對象有相通之處。
包的聲明和包體可以放在不同的文件中,方便管理。
包的創建
包聲明
語法:
CREATE [OR REPLACE] PACKAGE
package name
IS| AS
公共變量、異常、遊標、子程序等聲明
END
package name;
例子:
CREATE OR REPLACE PACKAGE comm package
IS
g comm NUMBER := 100 ;
PROCEDURE reset comm(p comm IN NUMBER) ;
END comn package;
創建包體
CREATE OR REPI ACE PACKAGE BODY
package_ name
IS
私有的變量、靜態變量、遊標、異常、類型、子程序、子程序體
END package name;
這裏注意:
- 在包體中定義的標識符是私有結構,在包的外部不可見
- 在包體中先定義私有變量和子程序,後定義公共子程序
另外,創建函數和之前的函數是一樣的。
刪除包
語法:
DROP PACKAGE package_name;
DROP PACKAGE BODY package_name;//只刪除包體
開發包的原則
- 先定義包聲明,再定義包體
- 包聲明中應該只包含公共結構
- 改變包的聲明需要重新編譯每個涉及到的子程序
- 包體的變化不要求重新編譯包的聲明
- 包聲明應該儘可能包含少的內容
使用包可以獲得更好的封裝性及模塊性,另外可以提升性能。