从 SQL 过程中返回结果集
在 SQL 过程中,可使用游标完成的工作超过通过结果集的行进行迭代完成的工作。还可使用游标将结果集返回至调用程序。
可通过 SQL 过程(存在嵌套过程调用时)或 C 语言版本的客户机应用程序(通过 CLI 应用程序编程接口、Java™、CLI 或 .NET CLR
语言编写)来检索结果集。
开始之前
您必须具有创建 SQL 过程的权限。
过程
要从 SQL 过程中返回结果集,请执行下列操作:
- 在 CREATE PROCEDURE 语句中指定 DYNAMIC RESULT SETS 子句
- 使用 WITH RETURN 子句声明游标
- 在 SQL 过程中打开游标
- 使游标保持对客户机应用程序打开:不要关闭游标
示例
以下是仅返回单个结果集的 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
@