我有一个整数列,根据其他人的说法,整数应该具有38的精度,并且基本上是Number(38)
我确定我错过了一些东西,但是如何在INTEGER列中输入128位数?
CREATE TABLE TEST
(
ID_INT INTEGER NOT NULL
);
insert into test( id_int)
values ( '0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890129010');
版本:Oracle 11
答案 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)