QCMDEXC 程序
执行命令 (QCMDEXC) API 是 IBM提供的程序,用于运行单个命令。
- 在高级语言 (HLL) 程序中。
- 在 CL 过程中。
- 在编译时不知道要运行的命令或要使用的参数的程序中。

命令运行后,控制权将返回到 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 程序不会提供运行时灵活性。
通过以下方式实现运行时灵活性:
- 将变量替换为参数列表中的常量,以及
- 在对 HLL 或 CL 程序的调用中指定变量的值。

在第二个参数上传递给 QCMDEXC 程序的命令长度是传递的命令字符串的最大长度。 如果将命令字符串作为括在引号内的字符串传递,那么命令长度正好是括在引号内的字符串的长度。 如果在变量中传递命令字符串,那么命令长度是 CL 变量的长度。 虽然允许这样做,但不需要将命令长度减小到变量中命令字符串的实际长度。
并非所有命令都可以使用 QCMDEXC 程序运行。 在调用 QCMDEXC 程序时传递的命令必须在进行调用的当前环境 (交互式或批处理) 中有效。 该命令不能是下列其中一项:
- 输入流控制命令 (BCHJOB , ENDBCHJOB 和 DATA)
- 只能在 CL 程序中使用的命令
在交互式作业中调用 QCMDEXC 时,可以在 CL 命令前面添加问号 (?) 以请求提示或使用选择性提示。
如果在通过 QCMDEXC 程序处理命令时检测到错误,那么将发送脱离消息。 您可以使用 Monitor Message (MONMSG) 命令在 CL 过程或程序中监视此脱离消息。
如果检测到语法错误,那么将发送消息 CPF0006 。 如果在处理命令期间检测到错误,那么该命令发送的任何脱离消息都将由 QCMDEXC 程序返回。 监视来自通过 QCMDEXC 程序运行的命令的消息的方式与监视来自 CL 过程和程序中包含的命令的消息的方式相同。
请参阅相应的高级语言参考书籍,以获取有关高级语言程序如何处理调用错误的信息。