Oracle Precision

时间:2013-06-26 05:40:54

标签: oracle database-design numbers

我希望数字取值介于-7.2E-75到+ 7.2E + 75之间。我该如何指定NUMBER的精度和比例。 (比例范围为1到38,精度为-84到127)。

如果还有其他方法可以做到这一点,请建议。

1 个答案:

答案 0 :(得分:4)

您建议的数值完全在the limits of the Oracle NUMBER datatype之内。

需要指定精度吗?允许将列定义为NUMBER:

SQL> desc t1
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                                               NUMBER
 COL2                                               NUMBER
 COL3                                               NUMBER
 COL4                                               NUMBER

SQL> insert into t1 (col1, col2) values ( -7.2E-75, +7.2E+75);

1 row created.

SQL> 

如果是困扰你的范围界限,则需要定义CHECK约束来强制执行规则。


  

“假设我希望COL1采用123456766675544.344546567676,NUMBER作为数据类型失败”

失败?怎么样?这个值对我来说很好(和以前一样):

SQL> insert into t1 (col1) values ( 123456766675544.344546567676);

1 row created.

SQL> 

因此,请提供更多详细信息,例如错误消息。

  

“当我触发上述查询时,它只显示123456766675544,”

这听起来像是一个显示问题。正在插入正确的值。看看这个:

SQL> set numwidth 50
SQL> select col1 from t1
/
  2  
                                              COL1
--------------------------------------------------
7.20000000000000000000000000000000000000000000E+75
                      123456766675544.344546567676

SQL> 

在这种情况下,将NUMWIDTH设置为其允许的最大值(在SQL * plus中)允许我们显示一个值,但另一个值仍然太大,因此我们必须使用科学记数法。