當創建一個表時,需要為表的各個列指定數據類型,Oracle的數據類型主要有5種,字元類型、數值類型、日期時間類型、LOB類型和偽列。 一、字元類型 1、CHAR類型 定長字元串,長度為1~2000位元組,如果定義時未指定大小,預設為1,使用時,若存儲的值大小小於指定的長度,則用空格填充剩餘長度, 若大 ...
當創建一個表時,需要為表的各個列指定數據類型,Oracle的數據類型主要有5種,字元類型、數值類型、日期時間類型、LOB類型和偽列。
一、字元類型
1、CHAR類型
定長字元串,長度為1~2000位元組,如果定義時未指定大小,預設為1,使用時,若存儲的值大小小於指定的長度,則用空格填充剩餘長度,
若大於指定長度,則報錯。示例:CHAR(20),若此時存儲一個長度為10的字元串,則還是占用20個位元組的空間。(此外,還可以用
CHAR(20CHAR)的方式進行定義,這種方式的意思是存儲多少個字元,而不是位元組)。
2、VARCHAR2類型
可變字元串,長度為1~4000位元組,定義時需指定大小,使用時,若存儲的值大小小於指定的長度,則長度縮小為值的大小,若大於指定長度,
則報錯。(Oracle也有VARCHAR類型,但該類型有可能會被在未來的版本中被重新定義,所以不推薦使用)示例:VARCHAR2(20),
若此時存儲一個長度為10的字元串,則占用10個位元組的空間。(也可以使用VARCHAR2(20CHAR)的方式定義,意思同CHAR類型)。
3、NCHAR類型
存儲Unicode字元的定長字元串,既存儲雙位元組字元類型數據,每個字元占用2個位元組,其他特性與CHAR類型相似。示例:NCHAR(20),
若此時存儲一個長度為10的字元串,則占用40個位元組的空間。
4、NVARCHAR2類型
存儲Unicode字元的可變字元串,其他特性與VARCHAR2類型相似。示例:NVARCHAR2(20),若此時存儲一個長度為10的字元串,
則占用20個位元組的空間。
二、數值類型
1、NUMBER類型
NUMBER類型可以存儲正數、負數、0、定點數和浮點數。格式為NUMBER(P,S),其中P為精度,表示數值的有效位數(從左邊第一個不為0
的數字算起,不包括小數點和負號為有效位數),在1~38之間。S為範圍,表示小數點右邊數字的位數,在-84~127之間。使用規則:
將值精確到小數點右邊S位並四捨五入,判斷有效位數是否<=P。以下結合幾個示例進行說明:
(1)、NUMBER(3):當要存儲的值是100時,精確到小數點右邊0位並四捨五入後值為100,有效位數為3,可以存儲。當值是3.563時,
精確到小數點右邊0位並四捨五入後值為4,有效位數為1,可以存儲。當值是2350.5時,精確到小數點右邊0位並四捨五入後值為2351,
有效位數為4,不可以存儲。
(2)、NUMBER(3,2):當要存儲的值是100時,精確到小數點右邊2位並四捨五入後值為100.00,有效位數為5,不可以存儲。當值是3.563時,
精確到小數點右邊2位並四捨五入後值為3.56,有效位數為3,可以存儲。當值是2350.5時,精確到小數點右邊2位並四捨五入後
值為2350.50,有效位數為6,不可以存儲。
(3)、NUMBER(3,-2):當S為負數時,較為特殊,會將值左邊|S|(|S|為S的絕對值)位的值進行四捨五入後取0且不計入有效位數,
如:當要存儲的值是100時,實際值為100,有效位數為1,可以存儲。當值是3.5時,實際值為0,有效位數為1,可以存儲。
當值是2350.5時,實際值為2400,有效位數為2,可以存儲。
2、INTEGER類型
是NUMBER的子類型,等同於NUMBER(38,0),用於儲存整數。
3、FLOAT類型
是NUMBER的子類型,格式為FLOAT(n),n在1~126之間,這個值是二進位的精度,最大值126轉換為十進位大概為38。
三、日期時間類型
1、DATE類型
存儲日期和時間的類型,使用7個位元組的固定長度,存儲世紀、年、月、日、時、分、秒,最小時間為公元前4712年1月1日,最大時間為
公元9999年12月31日。可以使用SYSDATE函數獲取當前時間的DATE類型。
2、TIMESTAMP類型
存儲日期和時間的類型,使用7到12位元組長度,秒數精確到小數秒(不指定精度的情況下為小數點後6位,指定精度可以達到9位),
且包含時區信息。可以使用SYSTIMESTAMP函數獲取當前時間的TIMESTAMP類型。
四、LOB類型
1、CLOB類型
存儲大量字元數據,可以存儲單位元組字元數據和多位元組字元數據,主要用於存儲非結構化XML文檔。
2、BLOB類型
存儲二進位對象,如圖片、視頻和音樂。
3、BFILE類型
存儲一個定位器,該定位器指向一個伺服器文件系統的二進位文件,最大為4G。
4、NCLOB類型
與CLON類似,不過NCLON可同時支持固定寬度字元集和可變寬度字元集,最大為4G。
操作LOB類型數據可以使用PL/SQL提供的DBMS_LOB程式包來完成,使用LOB類型要合理分配好表空間,否則會對性能造成影響。
五、偽列
偽列的定義:類似於表中的列,但並未實際存儲在表中,無法對偽列進行增刪改。
1、ROWID
表中的每一行都有一個地址,可以唯一的標識資料庫中的一行,ROWID可以返回這個地址,可以用來作為查詢條件查詢唯一行,提高查詢效率,
還可以查看行在表中是如何存儲的。
2、ROWNUM
ROWNUM偽列可以為查詢結果從1開始進行排序,可以用來限制返回行數,Oracle的分頁就是使用ROWNUM實現的。需註意,使用ROWNUM
必須包含1,否則無法查出數據,也就是說,ROWNUM=1可以查詢出結果集中第一行的數據,但ROWNUM=2是無法查詢任何數據的,
還有ROWNUM>2也是無法查詢出任何數據的,但使用ROWNUM<2就可以查詢出兩條數據,這是因為ROWNUM是一個從1開始的偽列,
Oracle認為ROWNUM>n(n為大於1的自然數)的條件不成立,所有無法查出數據。
(關於偽列的更多資料可以查看官方文檔:http://docs.oracle.com/cd/E11882_01/server.112/e41084/pseudocolumns.htm#SQLRF0025)