在 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;
有办法吗?
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))'