包规格定义包的用户接口(API)。规格列出了对包的用户可见的函数、过程、类型、 异常和游标。

用于为包定义接口的语法包括:

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 [, ... ]

参数

参数 说明
package_name package_name 是分配给包的标识符,每个包必须有一个在 schema 中唯一的名称。
AUTHID DEFINER 如果您省略 AUTHID 子句或指定 AUTHID DEFINER,则包所有者的特权将用于确定对数据库对象的访问特权。
AUTHID CURRENT_USER 如果您指定 AUTHID CURRENT_USER,则将使用执行包中程序的当前用户的特权来确定访问特权。
declaration declaration 是公共变量的标识符。公共变量可以使用语法 package_name.variable 从包的外部访问。可以有零个、一个或多个公共变量。公共变量定义必须放在过程或函数声明之前。

declaration 可以是以下任意内容:

  • 变量声明
  • 记录声明
  • 集合声明
  • REF CURSOR 和游标变量声明
  • TYPE 定义(对于记录、集合和 REF CURSOR)
  • 异常
  • 对象变量声明
proc_name 公共过程的名称。
argname 参数的名称。参数在函数或过程正文中通过此名称来引用。
IN | IN OUT | OUT 参数模式。IN 声明参数仅用于输入。这是默认值。IN OUT 允许参数接收值和返回值。OUT 指定参数仅用于输出。
argtype 参数的数据类型。参数类型可以是基本数据类型、使用 %TYPE 的现有列的类型副本,或者是用户定义的类型,例如嵌套表或对象类型。不能为任何基本类型指定长度,例如,指定 VARCHAR2 而不是 VARCHAR2(10)。

列的类型通过编写 tablename.columnname%TYPE 来引用,使用此格式有时候能够帮助存储过程独立于表定义的变化。

DEFAULT value 如果调用中未提供输入参数,则 DEFAULT 子句为输入参数提供默认值。不能为具有模式 IN OUT 或 OUT 的参数指定 DEFAULT。
func_name 公共函数的名称。
rettype 返回数据类型。
DETERMINISTIC DETERMINISTIC 是 IMMUTABLE 的同义词。DETERMINISTIC 函数不能修改数据库,并在提供相同参数值时始终得到相同结果;它不执行数据库查找,也不以其他方式使用其参数列表中不直接存在的信息。如果包括此子句,则使用全常量参数对函数的任意调用将立即替换为函数值。
restriction 为了实现兼容性而支持以下关键字,但被忽略:
  • RNDS
  • RNPS
  • TRUST
  • WNDS
  • WNPS