Oracle - точность типа данных Integer max?Я могу ввести более 38 чисел в поле целого числа - PullRequest
3 голосов
/ 27 января 2012

У меня есть целочисленный столбец, и в соответствии с другими, целое число должно иметь точность 38 и в основном является псевдонимом для типа делкарации Number(38)

Я уверен, что что-то упустил, но как я могу ввести 128 цифр в столбец INTEGER?

CREATE TABLE TEST
(
  ID_INT  INTEGER                               NOT NULL
);

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

Версия: Oracle 11

Ответы [ 3 ]

2 голосов
/ 27 января 2012

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 голосов
/ 27 января 2012

Вы можете вставить строку. Но сами данные затем усекаются. Например, обратите внимание, что последние 2 цифры теряются при запросе данных

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

1 row created.

SQL> select id_int from test;

                                                ID_INT
------------------------------------------------------
            123456789012345678901234567890123456789000
0 голосов
/ 27 января 2012

Я полагаю, что точность относится к максимальному количеству значащих цифр

Это не то же самое, что разрешить только длину 38.

См. Здесь объяснение значащих цифр .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...