无法将大型双精度存储到Oracle中(ORA-01426:数字溢出)

时间:2015-10-09 12:04:47

标签: oracle oracle11g

在我的Oracle(Oracle Database 11g企业版11.2.0.3.0版 - 64位生产版)中,此查询失败:

constant User = MyLibrary::User;

它告诉我类似的东西:ORA-01426:数字溢出(我已经尝试过9.1E136,9E136)。这真的很奇怪,因为应支持最高约2E + 308的数字(http://docs.oracle.com/javadb/10.10.1.2/ref/rrefsqljdoubleprecision.html)。

我从Hibernate应用程序遇到了这个问题,该应用程序将双字段映射到FLOAT,默认精度为126(应该绰绰有余(http://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqlj27281.html)。

任何人都有任何想法?取决于一些配置参数?提前谢谢。

2 个答案:

答案 0 :(得分:1)

Oracle文档声明:

1 x 10-130至9.99 ... 9 x 10125范围内的正数,最多38位有效数字

您正在溢出数字数据类型。

Numeric Types

答案 1 :(得分:1)

好的,我找到了一个解决方案:有binary_double类型,当d附加到它们的值时,会有类似的数字:

select 9.1E+136d from dual; # works
select 9.1E+136 from dual; # doesn't work

create table test ( no binary_double primary key );
insert into test values ( 9.2E136d ); # OK 
insert into test values ( 9.3E136 ); # Fails

如此不必要的愚蠢...