包規(guī)格定義包的用戶接口(API)。規(guī)格列出了對包的用戶可見的函數(shù)、過程、類型、 異常和游標。

用于為包定義接口的語法包括:

CREATE [ OR REPLACE ] PACKAGE package_name
  [ authorization_clause ]
  { IS | AS }
  [ declaration; ] ...
 [ procedure_or_function_declaration; ] ...
 [ package_name ] ;

其中

 authorization_clause :=
{ AUTHID DEFINER } | { AUTHID CURRENT_USER }

其中

procedure_or_function_declaration :=
procedure_declaration | function_declaration

其中

procedure_declaration :=
PROCEDURE proc_name[ argument_list ] [restriction_pragma];

其中

function_declaration :=
FUNCTION func_name [ argument_list ]
  RETURN rettype [ restriction_pragma ];

其中

argument_list :=
( argument_declaration [, ...] )

其中

argument_declaration :=
argname [ IN | IN OUT | OUT ] argtype [ DEFAULT value ]

其中

restriction_pragma :=
PRAGMA RESTRICT_REFERENCES(name, restrictions)

其中

restrictions :=
restriction [, ... ]

參數(shù)

參數(shù) 說明
package_name package_name 是分配給包的標識符,每個包必須有一個在 schema 中唯一的名稱。
AUTHID DEFINER 如果您省略 AUTHID 子句或指定 AUTHID DEFINER,則包所有者的特權將用于確定對數(shù)據(jù)庫對象的訪問特權。
AUTHID CURRENT_USER 如果您指定 AUTHID CURRENT_USER,則將使用執(zhí)行包中程序的當前用戶的特權來確定訪問特權。
declaration declaration 是公共變量的標識符。公共變量可以使用語法 package_name.variable 從包的外部訪問。可以有零個、一個或多個公共變量。公共變量定義必須放在過程或函數(shù)聲明之前。

declaration 可以是以下任意內容:

  • 變量聲明
  • 記錄聲明
  • 集合聲明
  • REF CURSOR 和游標變量聲明
  • TYPE 定義(對于記錄、集合和 REF CURSOR)
  • 異常
  • 對象變量聲明
proc_name 公共過程的名稱。
argname 參數(shù)的名稱。參數(shù)在函數(shù)或過程正文中通過此名稱來引用。
IN | IN OUT | OUT 參數(shù)模式。IN 聲明參數(shù)僅用于輸入。這是默認值。IN OUT 允許參數(shù)接收值和返回值。OUT 指定參數(shù)僅用于輸出。
argtype 參數(shù)的數(shù)據(jù)類型。參數(shù)類型可以是基本數(shù)據(jù)類型、使用 %TYPE 的現(xiàn)有列的類型副本,或者是用戶定義的類型,例如嵌套表或對象類型。不能為任何基本類型指定長度,例如,指定 VARCHAR2 而不是 VARCHAR2(10)。

列的類型通過編寫 tablename.columnname%TYPE 來引用,使用此格式有時候能夠幫助存儲過程獨立于表定義的變化。

DEFAULT value 如果調用中未提供輸入?yún)?shù),則 DEFAULT 子句為輸入?yún)?shù)提供默認值。不能為具有模式 IN OUT 或 OUT 的參數(shù)指定 DEFAULT。
func_name 公共函數(shù)的名稱。
rettype 返回數(shù)據(jù)類型。
DETERMINISTIC DETERMINISTIC 是 IMMUTABLE 的同義詞。DETERMINISTIC 函數(shù)不能修改數(shù)據(jù)庫,并在提供相同參數(shù)值時始終得到相同結果;它不執(zhí)行數(shù)據(jù)庫查找,也不以其他方式使用其參數(shù)列表中不直接存在的信息。如果包括此子句,則使用全常量參數(shù)對函數(shù)的任意調用將立即替換為函數(shù)值。
restriction 為了實現(xiàn)兼容性而支持以下關鍵字,但被忽略:
  • RNDS
  • RNPS
  • TRUST
  • WNDS
  • WNPS