QCMDEXC 程序

执行命令 (QCMDEXC) API 是 IBM提供的程序,用于运行单个命令。

此 API 用于激活另一个命令:
  • 在高级语言 (HLL) 程序中。
  • 在 CL 过程中。
  • 在编译时不知道要运行的命令或要使用的参数的程序中。
从 HLL 或 CL 过程或程序中调用 QCMDEXC 程序。 要运行的命令作为 CALL 命令上的参数传递。
QCMDEXC 程序示例

命令运行后,控制权将返回到 HLL 或 CL 过程或程序。

该命令就像它不在程序中一样运行。 因此,不能在命令上使用变量,因为命令无法将值返回给 CL 变量。 此外,只能在 CL 过程或程序中使用的命令不能由 QCMDEXC 程序运行。 调用 QCMDEXC 程序的格式如下:


CALL PGM(QCMDEXC) PARM(command command-length)

输入要在第一个参数上作为字符串运行的命令。 必须指定命令库。


CALL PGM(QCMDEXC )  PARM('QSYS/CRTLIB LIB(TEST)' 22)

请记住,如果命令包含空格,那么必须将其括在单引号中。 字符串的最大长度为 32,702 个字符; 从不计算定界符 (单引号) 作为字符串的一部分。 在 PARM 参数上指定为第二个值的长度是作为命令传递的字符串的长度。 长度必须是长度为 15 且具有 5 个小数位的压缩十进制值。

因此,要替换库列表,对 QCMDEXC 程序的调用将如下所示:


CALL PGM(QCMDEXC) PARM('CHGLIBL LIBL(QGPL NEWLIB QTEMP)' 31)

可以将此语句编码到 HLL 或 CL 程序中,以在程序运行时替换库列表。 使用此方法时, QCMDEXC 程序不会提供运行时灵活性。

通过以下方式实现运行时灵活性:

  1. 将变量替换为参数列表中的常量,以及
  2. 在对 HLL 或 CL 程序的调用中指定变量的值。
例如,检查下图。
图 1。 调用 PGM 的示例
调用 PGM 示例

在第二个参数上传递给 QCMDEXC 程序的命令长度是传递的命令字符串的最大长度。 如果将命令字符串作为括在引号内的字符串传递,那么命令长度正好是括在引号内的字符串的长度。 如果在变量中传递命令字符串,那么命令长度是 CL 变量的长度。 虽然允许这样做,但不需要将命令长度减小到变量中命令字符串的实际长度。

并非所有命令都可以使用 QCMDEXC 程序运行。 在调用 QCMDEXC 程序时传递的命令必须在进行调用的当前环境 (交互式或批处理) 中有效。 该命令不能是下列其中一项:

  • 输入流控制命令 (BCHJOB , ENDBCHJOB 和 DATA)
  • 只能在 CL 程序中使用的命令

在交互式作业中调用 QCMDEXC 时,可以在 CL 命令前面添加问号 (?) 以请求提示或使用选择性提示。

如果在通过 QCMDEXC 程序处理命令时检测到错误,那么将发送脱离消息。 您可以使用 Monitor Message (MONMSG) 命令在 CL 过程或程序中监视此脱离消息。

如果检测到语法错误,那么将发送消息 CPF0006 。 如果在处理命令期间检测到错误,那么该命令发送的任何脱离消息都将由 QCMDEXC 程序返回。 监视来自通过 QCMDEXC 程序运行的命令的消息的方式与监视来自 CL 过程和程序中包含的命令的消息的方式相同。

请参阅相应的高级语言参考书籍,以获取有关高级语言程序如何处理调用错误的信息。