我的地图中有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.
Run Code Online (Sandbox Code Playgroud)
但是,从Cics中将A12AK等值插入数据库时,我没有遇到任何错误.它将A替换为1,B替换为2,依此类推......为什么会发生这种情况?以及如何避免这种情况
Gilbert正在为您提供有关修复CICS地图的建议.接受!
让我试着解释"奇怪"的价值......
当字符(PIC X
)放在PIC 9
数据项中时,表示字符值的字节的高4位被'F'x覆盖.低4位保持原样.
此时,查看EBCDIC角色图可能很有用
请注意,'A'的十六进制表示为'C1'x,1为'F1'x.当'A'移动到一个
PIC 9
字段时,它变为1(高4位,'C'x,用'F'x替换,低4位保持原样).所有字母表中的相似类型的东西.请注意,'A'到'Z'的EBCDIC字符序列不是连续的(当低4位滚入'A'x - 'F'x范围时,存在间隙).这就是为什么在将字母从"X"类型移动到"9"类型字段时始终会获得"有效"数字的原因.
当仅涉及数字,字母和空格时,从"X"到"9"类型数据项移动后,结果是有效的数值.然后这将通过IF NUMERIC
测试.
问题的根源在于,当该值传输到PIC 9
如上所述转换时定义的工作存储项时,CICS映射允许非数字数据输入.不是你想要的!正如Gilbert指出的那样,如果将CICS地图字段定义为"NUM",则用户可以输入的唯一有效字符是数字,这可以解决您的问题.
最后,请注意一些非字母字符,例如"@"将不会隐藏到有效数字中.
归档时间: |
|
查看次数: |
1649 次 |
最近记录: |