调用存储过程

要调用存储在数据库中的过程,请使用 ESQL CALL 语句。存储过程必须由具有以下子句的 CREATE PROCEDURE 语句定义:
  • DATABASE 语言子句
  • EXTERNAL NAME 子句,标识该过程在数据库中的名称以及它所属的数据库模式(可选)。

当您使用 CALL 语句调用存储过程时,代理确保 ESQL 定义和数据库定义满足以下条件:

以下限制适用于存储过程的使用:

在 ESQL 中创建存储过程

当您定义与数据库存储过程相对应的 ESQL 过程时,可以指定限定名(其中限定符为数据库模式)或非限定名。

要创建存储过程,请执行以下操作:

  1. 编写类似于此示例语句的代码,以创建非限定过程:
    CREATE PROCEDURE myProc1(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL NAME "myProc";

    指定的 EXTERNAL NAME 必须与在数据库中创建的定义相匹配,但可以指定为相应的 ESQL 过程选择的任何名称。

  2. 编写类似于此示例语句的代码,以创建限定过程:
    CREATE PROCEDURE myProc2(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL NAME "Schema1.myProc";
  3. 编写类似于此示例语句的代码,以便在 Oracle 软件包中创建限定过程:
    CREATE PROCEDURE myProc3(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL
                     NAME "mySchema.myPackage.myProc";
有关数据库中存储过程定义的示例,请参阅 CREATE PROCEDURE 语句

调用存储过程

  1. 编写类似于此示例语句的代码,以调用非限定过程:
    CALL myProc1('HelloWorld');

    因为没有将 myProc1 过程明确定义为属于任何模式,所以该过程必须以缺省模式(其名称是用来连接到数据源的用户名)存在,否则命令将失败。

  2. 以下示例调用了 Schema1 模式中的 myProc 过程。
    CALL myProc2('HelloWorld');
  3. 编写类似于此示例语句的代码,以调用具有动态模式的非限定过程:
    DECLARE Schema2 char 'mySchema2';
    CALL myProc1('HelloWorld') IN Database.{'Schema2'};

    此语句调用数据库 Schema2 中的 myProc1 过程,覆盖缺省 username 模式。

调用返回两个结果集的存储过程

要调用采用一个输入参数、返回一个输出参数和两个结果集的存储过程,请执行以下操作:
  1. 使用 CREATE PROCEDURE 语句定义该过程,该语句指定一个输入参数,一个输出参数和两个结果集:
    CREATE PROCEDURE myProc1 (IN P1 INT, OUT P2 INT)
      LANGUAGE DATABASE
      DYNAMIC RESULT SETS 2
      EXTERNAL NAME "myschema.myproc1";
  2. 要使用字段引用调用 myProc1 过程,请编写以下代码:
    /* using a field reference */
    CALL myProc1(InVar1, OutVar2, Environment.ResultSet1[],
                OutputRoot.XML.Test.ResultSet2[]);
  3. 要使用引用变量调用 myProc1 过程,请编写以下代码:
    /* using a reference variable*/
    DECLARE cursor REFERENCE TO OutputRoot.XML.Test;
    
    CALL myProc1(InVar1, cursor.OutVar2, cursor.ResultSet1[],
                         cursor.ResultSet2[]);
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ac17040_