传递参数时发生数据类型错误
除了使用 Call Program (CALL) 命令发生的错误外,还可能发生其他类型的数据类型错误。
当传递值时,数据类型 (TYPE 参数) 必须与调用过程或程序以及被调用过程或程序中的数据类型 (*CHAR , *DEC 或 *LGL) 相同。 尝试传递数字常量时,此区域中经常发生错误。 如果数字常量括在单引号中,那么它将作为字符串传递。 但是,如果常量未括在单引号中,那么它将作为具有 LEN (15 5) 的压缩数字字段传递。
在以下示例中,将带引号的数字值传递到期望十进制值的程序。 在调用程序 (PGMA) 中引用变量 &A 时,会出现十进制数据错误(转义信息 MCH1202 ):
CALL PGMA PARM('123') /* CALLING PROGRAM */
PGM PARM(&A) /* PGMA */
DCL &A *DEC LEN(15 5) /* DEFAULT LENGTH */
.
.
.
IF (&A *GT 0) THEN(...) /* MCH1202 OCCURS HERE */
在以下示例中,将十进制值传递到定义字符变量的程序。 通常,此错误不会导致运行时故障,但不正确的结果是常见的:
CALL PGMB PARM(12345678) /* CALLING PROG */
PGM PARM(&A) /* PGMB */
DCL &A *CHAR 8
.
.
.
ENDPGM
PGMB 中的变量 &A 的值为十六进制 001234567800000F。
通常,只要值表示为 "0" 或 "1" ,就可以将数据从逻辑 (*LGL) 变量传递到字符 (*CHAR) 变量,反之亦然。