oracle本来就没有int类型,为了与别的数据库兼容,新增了int类型作为number类型的子集。
int类型只能存储整数; number可以存储浮点数,也可以存储整数; number(8,1)存储小数位为1位,总长度为8的浮点数,如果小数位数不足,则用0补全; number(8)存储总长度为8的整数; int相当于number(22),存储总长度为22的整数。 举例说明: --创建表结构 SQL> create table tab(id0 int,id1 number,id2 number(8,1),id3 number(8)); Table created SQL> --插入测试数据 SQL> insert into tab select 1,1.5,1.6,8 from dual; 1 row inserted SQL> insert into tab select 1,1.55,1.6,8 from dual; 1 row inserted SQL> insert into tab select 1,1.595,1,8 from dual; 1 row inserted SQL> commit; Commit complete SQL> select * from tab; ID0 ID1 ID2 ID3 ---------- ---------- ---------- --------- 1 1.5 1.6 8 1 1.55 1.6 8 1 1.595 1.0 8--查询数据字典表dba_tab_columns
SQL> select table_name,column_name,data_type,data_length,data_precision,data_scale from dba_tab_columns a 2 where table_name='TAB' 3 and owner='NETMAX' 4 order by column_id; TABLE_NAME COLUMN_NAME DATA_TYPE DATA_LENGTH DATA_PRECISION DATA_SCALE --------------- -------------- ----------------- ---------------- ----------- ---------- TAB ID0 NUMBER 22 0 TAB ID1 NUMBER 22 TAB ID2 NUMBER 22 8 1 TAB ID3 NUMBER 22 8 0SQL>
在dba_tab_columns表中,
Data_type表示字段类型; Data_length表示字段类型的长度; Data_Precision表示字段类型的精度的总长度,如果为null,表示精度的总长度不固定,最长为Data_Length; Data_scale表示字段类型的精度范围,如果为0,表示只能存储为整数, 如果为null,表示可以存储整数或者浮点数,浮点数位数不确定, 如果为整数,表示存储的精度位数。查询dba_tab_columns表,发现tab表中ID0字段类型int已经被转换为number(22)。