Db2 接受cics映射中字符的数字字段

Db2 接受cics映射中字符的数字字段,db2,cobol,cics,Db2,Cobol,Cics,我的地图上有4个字段,分别是9(6)、9(3)、9(3)、9(3)。我编写了如下验证代码: IF ROLLNUM IS NOT NUMERIC MOVE DFHRED TO ROLLNUMC MOVE 'INVALID DATA' TO RESMSGO MOVE ROLLNUMI TO ROLLNUMO PERFO

我的地图上有4个字段,分别是9(6)、9(3)、9(3)、9(3)。我编写了如下验证代码:

IF ROLLNUM IS NOT NUMERIC                          
MOVE DFHRED TO ROLLNUMC                         
MOVE 'INVALID DATA' TO RESMSGO                  
MOVE ROLLNUMI TO ROLLNUMO                       
PERFORM SEND-MAP THRU SEND-MAP-EXIT             
PERFORM KEY-VALIDATION THRU KEY-VALIDATION-EXIT.
但在从cics向数据库中插入像A12AK这样的值时,我没有收到任何类型的错误。它将A替换为1,B替换为2,依此类推。。。 为什么会这样?以及如何避免这种情况

将ATTRB=(unput,NUM,FSET,IC)添加到BMS映射集的DFHMDF字段中,用于数字字段


您还需要JUSTIFY=(右,零)。

吉尔伯特正在为您提供修复CICS映射的好建议。拿着

让我试着解释一下“奇怪”的价值观

当字符(
picx
)被放置在
pic9
数据项中时 表示字符值的字节的前四位用“F”x覆盖。这个 低4位保持原样

在这一点上,查看

请注意,“A”的十六进制表示是“C1”x,1是“F1”x。当“A”移动到A时
pic9
字段变为1(上面的4位'C'x'替换为'F'x,下面的4位保持原样)。 字母表中所有字母的类似类型。注意 “A”到“Z”的EBCDIC字符序列不连续(当较低的4位 进入“A'x-”F'x范围)。这就是为什么在将字母从“X”类型移动到“9”类型字段时,始终会得到一个“有效”数字的原因

当仅涉及数字、字母和空格时,从“X”型数据项移动到“9”型数据项后,结果是有效的数值。 这将通过
IF NUMERIC
测试

问题的根源在于CICS映射允许非数字数据输入,当该值传输到 定义为
PIC 9
的工作存储项按照上述方式进行转换。不是你想要的!正如吉尔伯特指出的,如果你定义 CICS映射字段为“NUM”。用户可以输入的唯一有效字符是数字,这就解决了您的问题


最后,请注意,一些非字母字符,例如“@”,将无法连贯成有效数字

> PICS还提供了BIF DeWITE选项。< /P>您是否在BMS MAPSET的DFHMFDF字段中指定了用于数字字段的AttBu=(unPRT,努姆)?@ GiBeer-LeBLun.No,我给出如下:Tracb=(unPRT,fSET,IC),PICIN='9(6)',长度=6Adum Num,看是否修复了您的问题。