我的地图中有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,依此类推...... 为什么会这样?以及如何避免这个
答案 0 :(得分:5)
Gilbert正在为您提供有关修复CICS地图的建议。拿吧!
让我试着解释“奇怪”的价值......
当一个字符(PIC X
)放在PIC 9
数据项中时
表示字符值的字节的高4位用'F'x覆盖。该
低4位保持原样。
请注意,'A'的十六进制表示为'C1'x,1为'F1'x。当'A'移动到a时
PIC 9
字段变为1(高4位,'C'x,用'F'x替换,低4位保持原样)。
所有字母表中的相似类型的东西。请注意
'A'到'Z'的EBCDIC字符序列不是连续的(低4位时有间隙
滚入'A'x - 'F'x范围)。这就是为什么在将字母从“X”类型移动到“9”类型字段时,您将始终获得“有效”数字。
当仅涉及数字,字母和空格时,从“X”到“9”类型数据项移动后,结果是有效的数值。
然后,这将通过IF NUMERIC
测试。
问题的根源在于,当该值传输到您的CICS映射时,您的CICS映射允许非数字数据输入
定义为PIC 9
的工作存储项目如上所述进行转换。不是你想要的!吉尔伯特指出,如果你定义
CICS地图字段为“NUM”,用户可以输入的唯一有效字符是数字,这可以解决您的问题。
最后,请注意,某些非字母字符(例如“@”)不会隐藏到有效数字中。
答案 1 :(得分:4)
将ATTRB =(UNPROT,NUM,FSET,IC)添加到数字字段的BMS地图集的DFHMDF字段中。
您还需要JUSTIFY =(RIGHT,ZERO)。
答案 2 :(得分:0)
CICS还提供BIF DEEDIT选项。