使用 Db2 在 select 语句中调用存储过程

问题描述

我有一个可以正常工作的 select 语句,但我还需要一个来自存储过程的值,我不能在 select 语句中将其作为值调用

select 
    recp.percent,(call libraryEXT.get_rate_for_detail(detail_number))
from 
    mainTable.orders ORD
inner join 
    mainTable.receipts recp on ORD.rcptID = recp.rcptID

获取 recp.percent 效果很好,但是将下一个值放入调用存储过程中表示它不期望“调用

如果我自己运行存储过程,它会返回一个包含以下列的记录:name,rcptID,time 并且我需要来自该列的 rcptID

如何正确调用存储过程并使返回的值成为我在 select 语句中的另一个值?

解决方法

正如@mao 所说,这不可能在 select 语句中调用 SP。

如果您是 SP 所有者,请尝试创建一个表函数。这个可以在 select 语句中调用。

,

鉴于您使用 CALL libraryEXT.get_rate_for_detail(detail_number) 的方式,它显然只返回一个值。

既然如此,将其作为缩放器用户定义函数 (UDF) 会更好地为您服务。

这就是你的代码的样子:

select 
    recp.percent,libraryEXT.get_rate_for_detail_UDF(detail_number) as rate
from 
    mainTable.orders ORD
inner join 
    mainTable.receipts recp on ORD.rcptID = recp.rcptID

我重命名了函数只是为了清楚它不是存储过程。如果您创建了存储过程,您可以删除它并为 UDF 使用相同的名称。