从SQL中带参数调用RPG程序

问题描述 投票:0回答:1

在 DB2 SQL 中,从 7.1 开始就存在 SQL 函数

QCMDEXC()
来调用外部程序。

我想这样使用它:

SELECT    
    MYFIELD,
    CASE 
       WHEN QSYS2.QCMDEXC('CALL MYPROGRAM(**MYFIELD**)' ) = 1 THEN 'Successfull'
       ELSE 'Error'
    END AS "Cmd status"
FROM 
    MYFILE;

有办法吗?

sql ibm-midrange db2-400
1个回答
0
投票

QCMDEXC 已经存在很长时间了...

IBM 通过提供 7.1 左右的存储过程版本简化了它的使用,我认为。

但是,为了按照您想要的方式使用它,您需要 7.4 和 7.3 中的标量函数版本。

假设该功能可用,那么您所需要的就是

SELECT    
    MYFIELD,
    CASE 
       WHEN QSYS2.QCMDEXC('CALL MYPROGRAM parm(''' concat MYFIELD concat ''')' ) = 1 THEN 'Successfull'
       ELSE 'Error'
    END AS "Cmd status"
FROM 
    MYFILE;

上面假设

MYFIELD
是一个字符串。如果您尝试传递数值。如果
MYFIELD
是数字,那么您需要通过
char()
将其转换为字符串,并确保
MYPROGRAM
在命令解释器传递数字常量时接受压缩的 (15,5) 值。

但是,如果您使用的是 7.4+ 并且拥有 Dec 2022 PTF's 可以增强 CALL 命令的参数传递;您将能够指定如何传递数值。

'CALL MYPROGRAM parm(' concat char(MYFIELD) concat ' (*INT 4))'
© www.soinside.com 2019 - 2024. All rights reserved.