传递参数时发生数据类型错误

除了使用 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) 变量,反之亦然。