接受cics地图中的字符的数字字段

时间:2012-04-30 14:06:31

标签: 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                       
PERFORM SEND-MAP THRU SEND-MAP-EXIT             
PERFORM KEY-VALIDATION THRU KEY-VALIDATION-EXIT.

但是从cics中将A12AK等值插入数据库时​​,我没有遇到任何错误。它将A替换为1,B替换为2,依此类推...... 为什么会这样?以及如何避免这个

3 个答案:

答案 0 :(得分:5)

Gilbert正在为您提供有关修复CICS地图的建议。拿吧!

让我试着解释“奇怪”的价值......

当一个字符(PIC X)放在PIC 9数据项中时 表示字符值的字节的高4位用'F'x覆盖。该 低4位保持原样。

此时查看EBCDIC character chart

可能会有用

请注意,'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选项。