为什么我会收到"[SQL0802] 数据映射错误的数据转换"异常?



我对iSeries/db2并不熟悉。但是,我在一个将其用作主要数据库的网站上工作。

最近将一个新列添加到现有表中。当我通过AS400查看它时,我会看到以下数据类型:

Type: S
Length: 9
Dec: 2

这告诉我,这是一个数字字段,在小数点前有6位数字,而十分位点后的2位数字。

当我使用简单的选择(SELECT MYCOL FROM MYTABLE)查询数据时,我会毫无问题地收回所有记录。但是,当我尝试在同一列上使用DISTINCTGROUP BYORDER BY时,我会得到以下例外:

[SQL0802] Data conversion of data mapping error

我已经推论出至少一个记录具有无效的数据 - 我的DBA所说的"空白"或" 4 O"。但是这怎么可能?尝试将无效数据添加到该列时,数据库不应该引发异常吗?

有什么办法可以解决这个问题,例如在我的查询中滤除这些不良记录?

" 4 o"表示0x40,它是空间或空白字符的EBCDIC代码,是将记录中的任何新空间放置在任何新空间中的默认值。

传统程序/操作可以引入小数数据错误。例如,如果使用FMTOPT(*NOCHK)选项的CPYF命令创建并填充了新文件。

修复它的最简单方法是编写HLL程序(RPG)以读取文件并更正记录。

我唯一能找到的解决方案是编写一个脚本,该脚本检查列中空白值,然后在找到它们时将它们更新为零。

如果文件具有记录格式级别检查关闭[即。LVLCHK(*NO)]或被覆盖,然后是HLL程序。(EX。RPG,COBOL等)未与新记录重新编译的情况可能会在本列中写出无效数据的记录,尤其是如果新列不在记录结束时。

确保重新编译所有使用本机I/O在此文件上编写或更新记录的程序。

我能够通过将密钥列施加到整数来解决此错误。我更改了加入...

FROM DAILYV INNER JOIN BXV ON DAILYV.DAITEM=BXV.BXPACK

...对此...

FROM DAILYV INNER JOIN BXV ON CAST(DAILYV.DAITEM AS INT)=CAST(BXV.BXPACK AS INT)

...而且我不必对表进行任何更正。这是一个非常古老的,非常混乱的数据库,其中有很多垃圾。我已经进行了许多更正,但这是正在进行的工作。

这对我有用:

其中1 = 1和

的ohordn

- 不起作用(从qgpl.mrtem1选择ORD)

(从qgpl.mrtem1选择char(ord))

相关内容

  • 没有找到相关文章

最新更新