从 SQL 过程中返回结果集

在 SQL 过程中,可使用游标完成的工作超过通过结果集的行进行迭代完成的工作。还可使用游标将结果集返回至调用程序。 可通过 SQL 过程(存在嵌套过程调用时)或 C 语言版本的客户机应用程序(通过 CLI 应用程序编程接口、Java™、CLI 或 .NET CLR 语言编写)来检索结果集。

开始之前

您必须具有创建 SQL 过程的权限。

过程

要从 SQL 过程中返回结果集,请执行下列操作:

  1. 在 CREATE PROCEDURE 语句中指定 DYNAMIC RESULT SETS 子句
  2. 使用 WITH RETURN 子句声明游标
  3. 在 SQL 过程中打开游标
  4. 使游标保持对客户机应用程序打开:不要关闭游标

示例

以下是仅返回单个结果集的 SQL 过程的示例:

  CREATE PROCEDURE  read_emp()
  SPECIFIC read_emp
  LANGUAGE SQL 
  DYNAMIC RESULT SETS 1

  Re:  BEGIN

    DECLARE c_emp CURSOR WITH RETURN FOR
      SELECT salary, bonus, comm.
      FROM employee
      WHERE job != 'PRES';

    OPEN c_emp;

  END Re

如果 SQL 过程返回之前使用 CLOSE 语句关闭了游标,那么游标结果集将不会返回至调用程序或客户机应用程序。

可使用多个游标从 SQL 过程返回多个结果集。要返回多个游标,必须完成下列操作:

  • 在 CREATE PROCEDURE 语句中指定 DYNAMIC RESULT SETS 子句。指定可能返回的最大可能结果集数。实际返回的结果集数不能超过此数。
  • 对通过指定 WITH RETURN 子句返回的每个结果集声明游标。
  • 打开要返回的游标。
  • 使游标保持对客户机应用程序打开:不要关闭游标。

对于要返回的每个结果集,都需要一个游标。

结果集将按它们的打开顺序返回给调用程序。

创建返回结果集的 SQL 过程后,您可能想要调用它并检索结果集。

还可通过启用同一游标的多个实例来返回多个结果集。您必须使用 WITH RETURN TO CLIENT 来声明游标。

使用 WITH RETURN TO CLIENT 启用打开游标的多个实例的示例如下:
CREATE PROCEDURE PROC(IN a INT)
BEGIN
  DECLARE index INTEGER DEFAULT 1;
  WHILE index < a DO
    BEGIN 
      DECLARE cur CURSOR WITH RETURN TO CLIENT FOR SELECT * FROM T WHERE pk = index;
      OPEN cur;
      SET index = index + 1;
    END;
  END WHILE;
END
@