---
# System prepended metadata

title: Package
tags: [SQL, Oracle]

---

# Package
###### tags: `Oracle` `SQL`
區別模組,易維護
包內可定義公共var/type
減少編譯開銷
使用OVERLOADING時只看DATATYPE 若相同即使編譯過也會出現  符合此呼叫的 'xxx' 宣告過多

包頭 
可以定義var type sp/func=>只能定義不能實作類似於interface

CREATE [OR REPLACE] PACKAGE [package_name]
{IS | AS}
pl/sql_package_spec(公有數據類型/公有CURSOR/公有變數常量/公有子程序)
END [package_name]; 

包體 
CREATE [OR REPLACE] PACKAGE BODY [package_name] 
{IS | AS} 
    [私有數據類型]
    [私有變數常量]
    [私有子程序聲明定義]
    [公有子程序定義]
BEGIN 

END [package_name];

包中的函數和過程可以重載
以下條件不能重載:

不能根據兩個函數的返回類型對其重載
重載子程序的參數的類族必須不同,例如,由於CHAR和VARCHAR2屬性同一類族,所以不能重載
打包子程序也可以重載

調用方法同SP 差別在於 PACKAGE.FUN OR PACKAGE.SP