我对 iseries/DB2 不太熟悉。但是,我在一个使用它作为主要数据库的网站上工作。
最近向现有表中添加了新列。当我通过 AS400 查看它时,我看到以下数据类型:
Type: S
Length: 9
Dec: 2
这告诉我这是一个数字字段,小数点前有 6 位数字,小数点后有 2 位数字。
当我使用简单的 SELECT (SELECT MYCOL FROM MYTABLE
) 查询数据时,我可以毫无问题地取回所有记录。但是,当我尝试在同一列上使用 DISTINCT
、GROUP BY
或 ORDER BY
时,出现以下异常:
[SQL0802] Data conversion of data mapping error
我推断出至少一条记录包含无效数据 - 我的 DBA 称之为“空白”或“4 O”。但这怎么可能呢?当尝试将无效数据添加到该列时,数据库是否应该抛出异常?
有什么办法可以解决这个问题,例如过滤掉查询中的那些不良记录?
最佳答案
“4 O”表示 0x40,它是空格或空白字符的 EBCDIC 代码,也是放置在记录中任何新空格中的默认值。
旧程序/操作可能会引入小数数据错误。例如,如果使用带有 FMTOPT(*NOCHK)
选项的 CPYF
命令创建并填充新文件。
修复此问题的最简单方法是编写 HLL 程序(RPG)来读取文件并更正记录。
关于sql - 为什么我会收到 "[SQL0802] Data conversion of data mapping error"异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13075585/