Я выбираю int для типа данных столбца, но номер сохраняется - PullRequest
0 голосов
/ 13 января 2019

Недавно, когда я создаю таблицу и добавляю столбцы в SQL Developer, когда я выбираю int или integer для типа данных столбца и нажимаю ok, вместо этого, если int, выбирается и сохраняется тип данных number. Также в коде SQL он сохраняется как тип данных. кто-нибудь сталкивался с этой проблемой?

Ответы [ 2 ]

0 голосов
/ 13 января 2019

INT - это не встроенный тип данных Oracle , а тип данных ANSI, который преобразуется во встроенный тип данных Oracle, как описано здесь .

INT преобразуется в NUMBER (p, 0)

Важным моментом является то, что в метаданных Oracle USER_TAB_COLUMNS вы видите только преобразованный встроенный тип Oracle .

Технически преобразованный тип данных - NUMBER(*,0), который вы можете увидеть в SQL Developer как сгенерированная таблица DDL.

Это означает, что в Oracle (38) используется максимально возможная точность . Масштаб равен нулю, поэтому можно хранить только целые числа.

0 голосов
/ 13 января 2019

INT - это NUMBER s подтип . Хотя вы видите это как NUMBER, значения, хранящиеся в столбце, будут целыми числами. Например:

SQL> create table test (col int);

Table created.

SQL> desc test
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL                                                NUMBER(38)

SQL> insert into test (col) values (1.3324);

1 row created.

SQL> insert into test (col) values (0.000034);

1 row created.

SQL> insert into test (col) values (1001);

1 row created.

SQL> select * from test;

       COL
----------
         1
         0
      1001

SQL>

Если вы создадите другую таблицу с типом данных столбца NUMBER и отметите USER_TAB_COLUMNS, вы увидите разницу в их масштабе (которая представляет количество цифр слева (или справа, в зависимости от знака) десятичной точки). ). Хорошо указывать как точность, так и масштаб (чтобы вы могли контролировать его). Если вы опустите масштаб (при создании столбцов), его значение по умолчанию будет 0 (ноль). Больше информации здесь: https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832

Пример:

SQL> create table test1 (col number);

Table created.

SQL> select table_name, data_precision, data_scale From user_tab_columns where column_name = 'COL';

TABLE_NAME                     DATA_PRECISION DATA_SCALE
------------------------------ -------------- ----------
TEST                                                   0
TEST1

SQL>
...