ORACLE最大数量

时间:2015-10-07 13:08:36

标签: oracle

如果我在oracle中声明一个列作为数字,它可以存储的最大数量是多少? 基于文档:

  

正数在1 x 10(凸起)-130到9.99 ... 9 x 10(凸起)125范围内   到38位有效数字

10(凸起)125是一个非常大的数字,有超过38位数。它不会存储吗?如果存储的数字大于38位,则会失败?它会保存,但查询时会失去精确度吗?

由于

2 个答案:

答案 0 :(得分:1)

来自Oracle Doc

  

正数在1 x 10 ^ 130到9.99 ... 9 x 10 ^ 125范围内   到38位有效数字负数从-1 x 10 ^ 130到   9.99 ... 99 x 10 ^ 125,最多38位有效数字

测试

create table tbl(clm number);
insert into tbl select power(10, -130) from dual;
insert into tbl select 9.9999*power(10, 125) from dual;
insert into tbl select 0.12345678912345678912345678912345678912123456 from dual;
insert into tbl select -1*power(10, -130) from dual;
select clm from tbl;
select to_char(clm) from tbl;

输出

1.000000000000000000000000000000000E-130
9.999900000000000000000000000000000E+125
.123456789123456789123456789123456789121
-1.00000000000000000000000000000000E-130

答案 1 :(得分:0)

使用scientific notation

存储数字(数据类型 NUMBER

即。 1000000为1 * 10 ^ 6,即您只存储1(尾数)和6(指数)

select VSIZE(1000000), VSIZE(1000001) from dual;

 VSIZE(1000000) VSIZE(1000001)
 -------------- --------------
              2              5

对于第一个数字,您只需要1个字节用于尾数,对于第二个4个字节(每个字节2个二进制数字)。

因此,使用 NUMBER ,您将在开始松开精度时获得异常。

 select power(2,136) from dual;
 87112285931760246646623899502532662132700

这个数字不准确,而且#34;填充"用零(指数)。这可能有害也可能没有害处 - 例如考虑MOD功能:

 select mod(power(2,136),2) from dual;
 -100

如果你想控制精确度,请使用例如数据类型 NUMBER(38,0)

 select cast(power(2,136) as NUMBER(38,0)) from dual;

 ORA-01438: value larger than specified precision allowed for this column