使用 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) 命令。 命令定义确保按预期将参数传递到命令处理程序。