使用 CALL 命令时发生数据类型错误

使用 Call Program (CALL) 命令时,可能会发生数据类型错误。

命令字符串的总长度包括命令名,空格,参数名,括号,变量的内容和使用的单引号。 对于大多数命令,命令字符串按预期启动命令处理程序。 但是,对于某些命令,可能未按预期传递某些变量。

Call Program (CALL) 命令与 Submit Job (SBMJOB) 命令上的 CMD 参数配合使用时,可能会发生意外结果。 在语法上, CALL 命令在与 CMD 参数一起使用时与在用作 CALL 命令的编译器伪指令时相同。 当与 CMD 参数一起使用时, Call Program (CALL) 命令将转换为稍后在批处理子系统启动时运行的命令字符串。 当 Call Program (CALL) 命令本身使用时, CL 编译器将生成代码以执行调用。

经常发生十进制常量和字符变量的常见问题。 在以下情况下,未根据需要构造命令字符串:

  • 当十进制数转换为十进制常量时。

    运行命令字符串时,将以长度为 LEN (15 5) 的压缩格式传递十进制常量。 它未以 CL 变量指定的格式传递。

  • 当声明字符变量的长度超过 32 个字符时。

如前所述传递字符变量的内容,通常以带引号的字符常量形式传递,并除去尾部空格。 因此,调用的程序可能无法传递足够的数据。

可以使用以下方法来更正构造命令字符串时的错误:

  • 创建要提交的 Call Program (CALL) 命令字符串,方法是将命令的各个部分并置到一个 CL 变量中。 使用 Submit Job (SBMJOB) 命令的请求数据 (RQSDTA) 参数提交命令字符串。
  • 对于长度大于 32 个字符的 CL 字符变量 (其中尾部空格很重要) ,请创建一个长度大于所需字符的变量,并将一个非空白字符子串到最后一个位置。 这将防止有效空格被截断。 被调用程序应该忽略额外的字符,因为它超出了期望的长度。
  • 创建将启动要调用的程序的命令。 提交新命令,而不是使用 Call Program (CALL) 命令。 命令定义确保按预期将参数传递到命令处理程序。