iSeries - 从CL程序调用SQL存储过程

时间:2008-10-29 15:23:40

标签: sql ibm-midrange control-language

如何从CL程序运行存储过程? RUNSQLSTM需要一个源成员,但我只是想构建一个命令,以便用户可以轻松地传入变量,所以这不起作用。

4 个答案:

答案 0 :(得分:5)

您可以调用系统程序QZDFMDB2并将一个参数传递给SQL字符串以执行。在这种情况下,SQL字符串是对存储过程的调用:

  CALL PGM(QZDFMDB2) PARM('CALL PROCEDURE (''XYZ'', ''ABC'')')

要替换您的值,请使用PARM的变量:

  DCL VAR(&CALL) TYPE(*CHAR) LEN(200) 

  CHGVAR VAR(&CALL) 
  VALUE('CALL PROCEDURE (''' *CAT &PARM1 *TCAT ''', ''' *CAT &PARM2 *TCAT ''')')

  CALL PGM(QZDFMDB2) PARM(&CALL)

答案 1 :(得分:3)

可能有两种选择:

在CL程序中创建一个临时源成员。使用提供的参数构造SQL语句以执行存储过程并将此源代码写入临时成员。然后使用生成的成员作为参数添加对RUNSQLSTM的调用。

第二个选项不是创建CL程序而是使用RPG / COBOL。通过使用嵌入式SQL,可以使用参数执行存储过程。它们的值应该从命令传递给程序。

答案 2 :(得分:2)

有一段时间,有人写过我曾经使用过的命令。我再也找不到这个参考了,但我还有两个选择:

  1. This article使用REXX
  2. This article使用RPG
  3. 它们都包含使命令工作所需的源。

答案 3 :(得分:0)

QCMDEXC可能是您正在寻找的命令。