我选择int作为列数据类型,但数字已保存

时间:2019-01-12 22:27:44

标签: oracle oracle-sqldeveloper

最近在创建表并在SQL Developer中添加列时,当我为列数据类型选择int或integer并单击ok时,如果选择int则选择并保存了数字数据类型。在SQL代码中也将其另存为数字数据类型。有没有人遇到过这个问题?

2 个答案:

答案 0 :(得分:3)

INTNUMBER子类型。尽管您将其视为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>

答案 1 :(得分:1)

INT不是Oracle Built-in Datatype,而是ANSI数据类型,它按照here所述在Oracle内置数据类型中进行了转换。

  

INT转换为NUMBER(p,0)

重要的一点是,在Oracle元数据USER_TAB_COLUMNS中,您仅看到经过转换的 Oracle内置类型。

从技术上讲,转换后的数据类型为NUMBER(*,0),您可能会在SQL Developer中将其视为生成的表DDL。

这意味着使用了Oracle(38)中的最大可能precision。小数位数为零,因此只能存储整数。