定义新的包规格。
语法
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;