CREATE PROCEDURE 语句 (PL/SQL)
CREATE PROCEDURE 语句用于定义存储在数据库中的过程。
调用
可以从 Db2® 命令行处理器 (CLP) ,任何受支持的交互式 SQL 接口,应用程序或例程执行此语句。
权限
语句授权标识拥有的特权必须至少包括下列其中一项权限或特权:
- 如果此过程的模式名不存在:对数据库的 IMPLICIT_SCHEMA 权限
- 如果此过程的模式名引用现有的模式:对该模式的 CREATEIN 特权
- DBADM 权限
如果指定了 OR REPLACE,那么此语句的授权标识必须是匹配的过程的所有者 (SQLSTATE 42501)。
语法
描述
- PROCEDURE procedure-name
- 指定过程的标识。 procedure-name 的未限定格式是最大长度为 128 的
SQL 标识。 在动态 SQL 语句中,使用 CURRENT SCHEMA 专用寄存器的值对未限定的对象名进行限定。 在静态 SQL 语句中,QUALIFIER
预编译或绑定选项隐式地指定未限定的对象名的限定符。 procedure-name
的限定格式是后面跟着句点字符和 SQL 标识的模式名。 如果指定了两部分的名称,那么模式名不能以“SYS”开头;否则,将返回错误 (SQLSTATE 42939)。
名称(包括隐式或显式的限定符)与参数数目不能标识已在目录中描述的过程 (SQLSTATE 42723)。 未限定的名称与参数数目在其模式中唯一,但不必跨模式唯一。
- 参数名称
- 指定参数的名称。 参数名对此过程必须唯一 (SQLSTATE 42734)。
- data-type
- 指定其中一种受支持的 PL/SQL 数据类型。
- READS SQL DATA
- 指示此过程可以包含不修改 SQL 数据的 SQL 语句。 此子句是 Db2 数据服务器扩展。
- IS 或 AS
- 引入过程体定义。
- 声明
- 指定一个或多个变量、游标或 REF CURSOR 类型声明。
- BEGIN
- 引入可执行块。 BEGIN-END 块可以包含 EXCEPTION 节。
- 语句
- 指定 PL/SQL 或 SQL 语句。 此语句必须以分号终止。
- EXCEPTION
- 用于引入异常节的可选关键字。
- WHEN 异常-条件
- 指定用于测试一种或多种异常的条件表达式。
- 语句
- 指定 PL/SQL 或 SQL 语句。 此语句必须以分号终止。
- END
- 用于结束块的必需关键字。 (可选)可以指定过程的名称。
注意
可以采用已模糊化的格式来提交 CREATE PROCEDURE 语句。 在已模糊化的语句中,只有过程名可读。 按照下面这样一种方式对该语句的其余内容进行编码:这些内容不可读,但是可由数据库服务器解码。 可以通过调用 DBMS_DDL.WRAP 函数来生成模糊化的语句。
示例
以下示例演示没有参数的单一过程:
CREATE OR REPLACE PROCEDURE simple_procedure
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('That''s all folks!');
END simple_procedure;
以下示例显示了一个采用 IN 和 OUT 参数的过程,该过程具有 GOTO 语句,其标签为标准 PL/SQL 格式 (
<<label>>
):CREATE OR REPLACE PROCEDURE test_goto
( p1 IN INTEGER, out1 OUT VARCHAR2(30) )
IS
BEGIN
<<LABEL2ABOVE>>
IF p1 = 1 THEN
out1 := out1 || 'one';
GOTO LABEL1BELOW;
END IF;
if out1 IS NULL THEN
out1 := out1 || 'two';
GOTO LABEL2ABOVE;
END IF;
out1 := out1 || 'three';
<<LABEL1BELOW>>
out1 := out1 || 'four';
END test_goto;