【问题标题】:Oracle number datatypeOracle 数字数据类型
【发布时间】:2016-04-13 19:55:55
【问题描述】:

数字数据类型的默认精度为 39 或 40,默认小数位数为零。

declare 
i number; -- default will be i:= number(40,0)

但是我可以将此值存储在其中。

i :=  120.45;

与精度相同,默认为 40。但我也可以存储 10^60 的值?

declare
i number;
begin
i := power(10,60);
dbms_output.put_line(i);
end;
/

这是否意味着 oracle 会自动相应地更改精度和缩放值?

【问题讨论】:

    标签: oracle


    【解决方案1】:

    Oracle NUMBER 数据类型不在未指定精度时默认小数位数为零。仅当指定精度 时,刻度默认为零。

    可为 NUMBER 数据类型指定的最大精度为 38 位十进制数字。

    问:这是否意味着oracle会自动改变精度和规模值?

    答:

    如果未指定精度和小数位数,则小数点不固定,允许“浮动”。 NUMBER 数据类型可以存储值的最大范围,POWER(10,-130)

    如果指定的精度没有标度,例如NUMBER(38),则比例默认为零。所以这相当于指定 NUMBER(38,0)。

    【讨论】:

      【解决方案2】:

      存储您给他的值,该值在数据类型 NUMBER 的最大和最小范围内。

      Oracle 文档:

      column_name NUMBER

      如果未指定精度,则列存储给定值。如果没有指定比例,则比例为零

      http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832

      【讨论】:

        【解决方案3】:

        The NUMBER type in Oracle is a portable, variable length (1 to 22 bytes), base 10 floating point data type with 38 decimal digits of precision。 IMO 它是 Oracle 的最佳功能之一,因为它有效地消除了开发人员了解或关心实现定义的数值存储方式限制的需要。对于NUMBER 类型的变量或列,没有默认比例;但是,如果将 NUMBER 声明为例如NUMBER(7) 那么你是正确的,比例默认为零。根据我的经验,以比例或精度声明任何 NUMBER 变量或列是非常不寻常的,我更喜欢让筹码尽可能下降,从数字上讲,然后根据需要进行舍入或截断。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-05-18
          • 1970-01-01
          • 2015-04-09
          • 1970-01-01
          • 2012-03-07
          • 2013-01-05
          • 2013-12-10
          相关资源
          最近更新 更多