Oracle - 整数数据类型精度最大?我可以在一个整数字段中输入超过38个数字

时间:2012-01-26 22:27:02

标签: sql oracle oracle11g

我有一个整数列,根据其他人的说法,整数应该具有38的精度,并且基本上是Number(38)

的类型除外的别名

我确定我错过了一些东西,但是如何在INTEGER列中输入128位数?

CREATE TABLE TEST
(
  ID_INT  INTEGER                               NOT NULL
);

insert into test( id_int)
values ( '0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890129010');

版本:Oracle 11

3 个答案:

答案 0 :(得分:2)

您可以插入行。但是数据本身会被截断。例如,请注意我查询数据时最后2位数字丢失

SQL> insert into test( id_int )
  2    values( 123456789012345678901234567890123456789012 );

1 row created.

SQL> select id_int from test;

                                                ID_INT
------------------------------------------------------
            123456789012345678901234567890123456789000

答案 1 :(得分:2)

INTEGER实际上是NUMBER的别名(也可以写为NUMBER(*)),而不是NUMBER(38)NUMBER本身意味着没有精度,你可以存储任何值。 38是38位精度的保证,允许运行Oracle的不同系统之间的可移植性,虽然它会很高兴地允许更高的数字 - 如果你不得不这样做,不要指望它总是正确移植。我创建了一个测试表:

create table TESTNUM
(
  ID_INT     integer
 ,ID_NUM38   number(38)
 ,ID_NUM     number(*)
);

这是一个显示存储精度的查询:

select CNAME, COLTYPE, WIDTH, SCALE, PRECISION
  from COL
 where TNAME = 'TESTNUM';

我回来了:

+----------+---------+-------+-------+-----------+
|  CNAME   | COLTYPE | WIDTH | SCALE | PRECISION |
+----------+---------+-------+-------+-----------+
| ID_INT   | NUMBER  |    22 |     0 |           |
| ID_NUM38 | NUMBER  |    22 |     0 |        38 |
| ID_NUM   | NUMBER  |    22 |       |           |
+----------+---------+-------+-------+-----------+

答案 2 :(得分:0)

我认为精度指的是最大有效位数

与仅允许38个长度数字不一样。

请参阅此处查看explanation of significant digits