1. 程式人生 > >Oracle中int和number資料型別的詳解

Oracle中int和number資料型別的詳解

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                  0

SQL>

在dba_tab_columns表中,
Data_type表示欄位型別;
Data_length表示欄位型別的長度;
Data_Precision表示欄位型別的精度的總長度,如果為null,表示精度的總長度不固定,最長為Data_Length;
Data_scale表示欄位型別的精度範圍,如果為0,表示只能儲存為整數,
如果為null,表示可以儲存整數或者浮點數,浮點數位數不確定,
如果為整數,表示儲存的精度位數。

查詢dba_tab_columns表,發現tab表中ID0欄位型別int已經被轉換為number(22)。