【发布时间】:2015-10-22 10:32:55
【问题描述】:
我有一个场景,我在绿色屏幕上从 as400(DB2) 上的表中使用 SQL 进行选择,然后我使用 SQL 工具从 Windows PC 中执行相同的 SQL 语句。
请注意未定义的值 40229 和 41158。db2 端的字段类型是 DECIMAL 9。
现在,当我使用 Sql 工具(IBM(R) Data Studio)在 Windows PC 上运行相同的 SQL 时:
由于某种原因,当数据返回为 -40229 和 -41158
感觉像是某种溢出,但为什么和什么?
当我从 Sql 工具导航到数据库结构时,字段类型是:
因此,在 as400 上,字段类型为 DECIMAL 9,而在 Windows 端则为 DECIMAL 9..
为什么这在 Windows 上是负面的?与类型有关吗?
SQL 窗口:select * from maxdtaclb.szciexp where TCNUOR ='129444'
SQL AS400:select * from maxdtaclb/szciexp where TCNUOR ='129444'
选择了所有值小于 0 的地方,得到了 11 行的结果...
再次,如果我在绿屏上使用相同记录的键进行选择,则为负数???
我注意到,即使我使用 rpgiv 程序从表中获取数据,它在 rpgiv 程序中也是负数..
【问题讨论】:
-
我相信您可以在该工具中设置许多内容的格式,包括日期(您可能应该改为使用
*ISO)。我认为它还包括数字?我会先检查一下。我们可以看看声明吗?难道只有这组字段吗?是否只有这一行(我们确定它是同一行,尽管情况似乎如此)?你确定你打的是同一张桌子(在会话中没有设置*LIBL或其他东西)? -
受影响的是完全相同的表和同一行。唯一奇怪的是,如果我选择另一行,则该值是正确的(不是负数),就像我的示例中一样,它们中的一些不正确。我会检查 *ISO 格式..
-
正确示例检查我的 as400 的第一张图像的值:18919 在 windows 端显示正确,但 40229 显示为负数......这就是为什么我认为类似溢出的原因?跨度>
-
我和@Clockwork-Muse 在一起……你确定它是同一行吗?尝试将
RRN()添加到您的选择中,如下所示:select rrn(a), a.* from maxdtaclb.szciexp A where TCNUOR ='129444' -
如果溢出,除了负数之外,它不太可能是相同的值。此外,压缩十进制不会像整数那样溢出。
标签: sql database db2 ibm-midrange db2-400