DB2 11.5存储过程如何返回多行结果并调用其他存储过程?
解决方向指引
1. 明确OUT参数与多行结果集的本质区别
当前存储过程使用单个OUT参数传递结果,循环时会持续覆盖参数值,最终仅返回最后一次循环的结果。而自动化应用需要的是多行结果集,OUT参数无法满足这种批量数据返回的需求,这是核心问题所在。
2. 改用DB2的结果集返回机制
DB2存储过程支持直接返回多行结果集,核心实现思路包括:
- 声明带有
WITH RETURN属性的游标,将目标查询绑定到该游标,存储过程执行后游标会将完整结果集返回给调用方 - 或者直接在存储过程中执行目标SELECT语句,无需通过变量中转,DB2会自动将查询结果作为结果集输出
- 这两种方式都能一次性返回所有符合条件的记录,适配自动化应用的逐行处理逻辑
3. 整合更新操作与结果集输出
需要保证在完成OTHER_PROCEDURE的表更新操作后,正确输出所有目标记录:
- 可以先完成所有更新逻辑,再一次性查询临时表或源表,返回完整结果集
- 若需要逐行处理并同步返回,可通过游标逐行输出结果,但实现复杂度相对较高
4. 清理冗余临时表定义
当前代码中先后定义了SESSION.TEMP_TABLE和TEMP_TABLE两个临时表,存在逻辑冗余,可能导致数据存储异常。需确认临时表的实际需求,仅保留一个即可,避免因临时表使用错误影响结果集的完整性。
内容的提问来源于stack exchange,提问作者Innertube
相关产品推荐
相关产品推荐

