【发布时间】:2018-04-19 14:32:54
【问题描述】:
我在 DB2 中有一个存储过程,它返回一堆列。我需要应用“WHERE”条件或对其返回的列之一进行排序。我不想在调用存储过程时触摸存储过程并进行此过滤/排序,如下所示
select * from 'call SP1()' as T where T.column1 > 10
这在 DB2 中可行吗?
【问题讨论】:
-
只需创建另一个存储过程来进行过滤,这可能是一种更明智且更简单的方法。
-
考虑使用返回表值的用户定义函数。您可以从表 UDF 中进行选择(使用
SELECT * FROM TABLE(YOUR_UDF())),UDF 可以做许多 SP 可以做的事情 ibm.com/support/knowledgecenter/SSEPGG_11.1.0/… 您还可以在 UDF 中调用一个 SP 和 PIPE() 如果您需要从 SP 返回的行 @ 987654322@ -
您能否在“答案”中给我一个 PIPE() 的示例?
-
好的。我的第二条语句错了,UDF 可以 PIPE() 输出行,但 UDF 不能从 SP 访问结果集,只能访问 OUT 或 INOUT 参数。很抱歉让您抱有希望。所以 mao 是对的,将你的 SP 包装在另一个 SP 中。否则,将代码从 SP 内部复制出来并将其放入 UDF 中。根据 SP 正在做什么,您可以在一个值为 UDF 的表中执行相同的操作
-
我上面说的不是真的.. 看下面的答案