编写外部程序,将结果集返回给分布式客户端
如果存储过程定义中的动态结果集值大于0,则外部过程可以向分布式客户端返回多个查询结果集。
过程
- 对于您希望返回的每个结果集,您的存储过程必须完成以下步骤:
- 使用选项 WITH RETURN 声明游标。
- 打开光标。
- 如果光标可以滚动,请确保光标位于结果表的第一行之前。
- 保持光标打开。
例如,假设您要返回一个结果集,其中包含部门 D11 中的所有员工的条目。 首先,请说明一下这部分员工的特征:EXEC SQL DECLARE C1 CURSOR WITH RETURN FOR SELECT * FROM DSN8C10.EMP WHERE WORKDEPT='D11';然后,打开光标:EXEC SQL OPEN C1;Db2 将结果集和存储过程的SQL游标名称返回给客户端。
当存储过程结束时, Db2 将查询结果集中的行返回给客户端。
Db2 在存储过程终止之前关闭的游标不会返回结果集。 存储过程必须对与结果集关联的每个游标执行CLOSE语句,这些结果集不应返回给DRDA客户端。
- 使用有意义的游标名称来返回结果集。用于返回结果集的光标名称可通过DESCRIBE语句的扩展提供给客户端应用程序。
使用对DRDA客户端应用程序有意义的游标名称,特别是在存储过程返回多个结果集时。
- 您可以在SELECT语句中使用与光标关联的任何对象来获取结果集:表、同义词、视图、创建的临时表、声明的临时表以及在本地 Db2 子系统中定义的别名。
- 通过发出带有结果集游标的FETCH语句,将子集的行返回给客户端。 不会将获取的行返回给客户端程序。 Db2 不会将获取的行返回给客户端程序。 例如,如果您声明游标为带有返回,然后执行语句OPEN、FETCH和FETCH,客户端将收到结果集中从第三行开始的数据。 如果结果集光标是可滚动的,并且您使用它获取行,则需要在获取行后且存储过程结束前将光标定位在结果表的第一行之前。
- 您可以使用已创建的临时表或已声明的临时表从存储过程返回结果集。此功能可用于将非关系型数据返回给DRDA客户端。 例如,您可以使用以下过程从存储过程访问 IMS 数据:
- 使用APPC/ MVS 执行 IMS 事务。
- 收到 IMS 回复信息,其中包含应返回给客户的信息。
- 将回复消息中的数据插入临时表中。
- 在临时表上打开光标。 当存储过程结束时,临时表中的行将返回给客户端。