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 | | |
+----------+---------+-------+-------+-----------+