如何在调用DB2存储过程时对结果集进行过滤与排序?
在DB2中调用存储过程时实现外部过滤/排序的方法
当然可以做到!你不需要修改原存储过程,DB2提供了直接将存储过程返回的结果集当作关系表处理的语法,核心就是用TABLE()函数来包装存储过程调用。
基本用法示例
针对你提到的场景,正确的写法应该是这样的:
SELECT * FROM TABLE(SP1()) AS T WHERE T.column1 > 10 ORDER BY T.column1;
这个语句会先执行存储过程SP1()获取它的结果集,然后将结果集别名为T,再对T应用WHERE过滤和ORDER BY排序操作,完全符合你的需求。
关键注意事项
- 你的存储过程必须是定义了返回结果集的类型:也就是在创建存储过程时,需要包含
DYNAMIC RESULT SETS n子句(n是该存储过程返回的结果集数量,比如DYNAMIC RESULT SETS 1表示返回1个结果集)。如果原存储过程没有这个定义,那它无法通过TABLE()函数被当作表处理。 - 如果存储过程需要传入参数,直接在
TABLE()的括号里传递即可,比如:SELECT * FROM TABLE(SP1('输入参数1', 123)) AS T WHERE T.column1 > 10; - 确保你引用的列名(比如
column1)和存储过程返回结果集的列名完全一致,大小写敏感与否取决于你的DB2配置。 - 如果存储过程返回多个结果集,默认
TABLE()会取第一个结果集;如果要指定后续的结果集,可以用RESULT SET子句,比如取第二个结果集:SELECT * FROM TABLE(SP1() AS RESULT SET 2) AS T WHERE T.column1 > 10;
这样就能在不修改原存储过程的前提下,灵活对返回结果进行过滤和排序啦。
内容的提问来源于stack exchange,提问作者HHH
相关产品推荐
相关产品推荐

