Oracle“Number”数据类型精度

时间:2015-01-21 10:15:10

标签: oracle plsql

我们正在尝试将值存储在一个表中,该表的列为" Number"数据类型。当我们存储一个非常小的值时会出现问题,例如" 0.000001。

SQL> desc testing
Name Type   Nullable Default Comments 
---- ------ -------- ------- -------- 
A    NUMBER Y     

SQL> insert into testing values (0.00000001);
1 row inserted

SQL> select * from testing;
         A
----------
     0.001
      1E-5
      1E-8
    0.0001

有没有办法,我们可以存储和检索绝对值,如商店,0.00001而不是1E-5。

1 个答案:

答案 0 :(得分:3)

这只是一个DISPLAY问题。正确设置 numformat

例如,

SQL> create table t(a number);

Table created.

SQL> insert into t values(0.000000000000001);

1 row created.

SQL> select * from t;

         A
----------
1.0000E-15

SQL> set numformat 9D9999999999999999
SQL> select * from t;

                  A
-------------------
  .0000000000000010

SQL>

更新 OP表示在尝试将数字值发送到应用程序前端时,上述操作无法解决问题。应用程序正在使用的特定于语言环境的NLS设置一定有问题。

如果问题仅在于显示,那么您可以使用to_char和正确的格式模型将其转换为char。

SQL> create table t(a number);

Table created.

SQL> insert into t values(.000000000000000000001);

1 row created.

SQL> select * from t;

         A
----------
1.0000E-21

SQL> select ltrim(to_char(a, '9999999D999999999999999999999', 'NLS_NUMERIC_CHARACTERS = ''.,''')) num from t

NUM
------------------------------
.000000000000000000001

SQL>

请注意ltrim的使用。