最近在创建表并在SQL Developer中添加列时,当我为列数据类型选择int或integer并单击ok时,如果选择int则选择并保存了数字数据类型。在SQL代码中也将其另存为数字数据类型。有没有人遇到过这个问题?
答案 0 :(得分:3)
INT
是NUMBER
的子类型。尽管您将其视为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。小数位数为零,因此只能存储整数。