Db2 接受cics映射中字符的数字字段
我的地图上有4个字段,分别是9(6)、9(3)、9(3)、9(3)。我编写了如下验证代码: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
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,看是否修复了您的问题。