定义新的包规格。

语法

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;