博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
db2 - 一个bigint问题
阅读量:4177 次
发布时间:2019-05-26

本文共 943 字,大约阅读时间需要 3 分钟。

一个bigint问题
db2 => values bigint ( 23 * 1000000 )
1
--------------------
23000000
1 record(s) selected.
db2 => values bigint ( 23 * 100000000 )
SQL0802N Arithmetic overflow or other arithmetic exception occurred.
SQLSTATE=22003
db2 => values bigint ( 23 * 1000000000 )
SQL0802N Arithmetic overflow or other arithmetic exception occurred.
SQLSTATE=22003
db2 => values bigint ( 23 * 10000000000 )
1
--------------------
230000000000
1 record(s) selected.

第一个和第四个都正常,为什么中间两个不正常,会溢出?

>>>>

因为对于第一组数据的1000000  DB2将其当作int,得出的结果也是在interger能表达的范围内。

第二组及第三组的1xxxx本身都在interger能表示的范围内,所以DB2也当他们是int,但是算出来的结果需要bigint才能表示。即在bigint这个scalar function生效前这个计算结果已经算术溢出了。
第四组数据的10000000000,由于其在bigint表示范围,因此db2将其作为bigint。而结果也是bigint能表示的范围,因此也不会出错。
所以可以说你的bigint scalar function没用对地方。values时是不用scalar function都能表达的,关键是要让运算不产生算术溢出。所以应该是:
values (23 * bigint(1xxxxxxxxx0))
这样明确的cast成bigint,db2就会用bigint的方式去存储运算结果了。

FROM: http://bbs.chinaunix.net/thread-1010685-1-1.html

转载地址:http://fktai.baihongyu.com/

你可能感兴趣的文章
Spring AOP概述
查看>>
CGLIB概述
查看>>
Spring中基于Schema的AOP配置详解
查看>>
Spring AOP中的动态代理实现机制
查看>>
Apache Maven入门指南
查看>>
Apache Maven的插件概述
查看>>
Apache Maven项目提供的Archetype插件详解
查看>>
Apache Maven项目提供的Compiler插件详解
查看>>
Apache Maven项目提供的Ant插件详解
查看>>
Apache Maven项目提供的AntRun插件详解
查看>>
WildFly AS提供的WildFly Maven Plugin插件详解
查看>>
Apache Maven项目提供的EJB插件详解
查看>>
Apache Maven项目提供的JAR插件详解
查看>>
Apache Maven项目提供的WAR插件详解
查看>>
Apache Maven项目提供的EAR插件详解
查看>>
从JBoss Seam 2.x迁移到JavaEE 7之一:组件模型
查看>>
从JBoss Seam 2.x迁移到JavaEE 7之二:组件的有效范围Scope
查看>>
从JBoss Seam 2.x迁移到JavaEE 7之三:对象的注入
查看>>
从JBoss Seam 2.x迁移到JavaEE 7之四:事件机制
查看>>
Java 1.5并发包之一:Lock
查看>>