定義新的包規格。
文法
CREATE [ OR REPLACE ] PACKAGE name
[ AUTHID { DEFINER | CURRENT_USER } ]
{ IS | AS }
[ declaration; ] [, ...]
[ { PROCEDURE proc_name
[ (argname [ IN | IN OUT | OUT ] argtype [ DEFAULT value ]
[, ...]) ];
[ PRAGMA RESTRICT_REFERENCES(name,
{ RNDS | RNPS | TRUST | WNDS | WNPS } [, ... ] ); ]
|
FUNCTION func_name
[ (argname [ IN | IN OUT | OUT ] argtype [ DEFAULT value ]
[, ...]) ]
RETURN rettype [ DETERMINISTIC ];
[ PRAGMA RESTRICT_REFERENCES(name,
{ RNDS | RNPS | TRUST | WNDS | WNPS } [, ... ] ); ]
}
] [, ...]
END [ name ]說明
CREATE PACKAGE 定義新的包規格。CREATE OR REPLACE PACKAGE 將建立新的包規格,或者替換現有規格。
如果包括 schema 名稱,則在指定的 schema 中建立包。否則在當前 schema 中建立。在同一個 schema 中,新包的名稱不能與任何現有包匹配,除非其目的是更新現有包的定義,在這種情況下使用 CREATE OR REPLACE PACKAGE。
建立該預存程序的使用者成為包的所有者。
參數
| 參數 | 說明 |
| name | 要建立的包(可能是 schema 限定的)的名稱。 |
| DEFINER | CURRENT_USER | 指定在確定是否允許訪問包中引用的資料庫物件時,是使用包所有者 (DEFINER) 的特權還是在包中執行程式的目前使用者 (CURRENT_USER) 的特權。預設值為 DEFINER。 |
| declaration | 公開變數、類型、遊標或 REF CURSOR 聲明。 |
| proc_name | 公用預存程序的聲明。 |
| argname | 參數的名稱。 |
| IN | IN OUT | OUT | 參數模式。 |
| argtype | 程式的參數的資料類型。 |
| DEFAULT value | 輸入參數的預設值。 |
| func_name | 公用函數的名稱。 |
| rettype | 返回資料類型。 |
| DETERMINISTIC | DETERMINISTIC 是 IMMUTABLE 的同義字。DETERMINISTIC 預存程序不能修改資料庫,並在提供相同參數值時始終會得到相同結果;它不執行資料庫尋找,也不以其他方式使用其參數列表中不直接存在的資訊。如果包括此子句,則使用全常量參數對預存程序的任何調用將立即替換為預存程序值。 |
| RNDS | RNPS | TRUST | WNDS | WNPS | 為了相容性目的而接受這些關鍵字,但會忽略它們。 |
樣本
包規格 empinfo 包含三個公用組件:公開變數、公用預存程序和公用函數。
CREATE OR REPLACE PACKAGE empinfo
IS
emp_name VARCHAR2(10);
PROCEDURE get_name (
p_empno NUMBER
);
FUNCTION display_counter
RETURN INTEGER;
END;