包规格定义包的用户接口(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 可以是以下任意内容:
|
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 | 为了实现兼容性而支持以下关键字,但被忽略:
|