1. 字符類型
數據類型 |
長度 |
說明 |
CHAR(n BYTE/CHAR) |
默認1字節,n值最大為2000 |
末尾填充空格以達到指定長度,超過最大長度報錯。默認指定長度為字節數,字符長度可以從1字節到四字節。 |
NCHAR(n) |
默認1字符,最大存儲內容2000字節 |
末尾填充空格以達到指定長度,n為Unicode字符數。默認為1字節。 |
NVARCHAR2(n) |
最大長度必須指定,最大存儲內容4000字節 |
變長類型。n為Unicode字符數 |
VARCHAR2(n BYTE/CHAR) |
最大長度必須指定,至少為1字節或者1字符,n值最大為4000 |
變長類型。超過最大長度報錯。默認存儲的是長度為0的字符串。 |
VARCHAR |
同VARCHAR2 |
不建議使用 |
2. 數字類型
數據類型 |
長度 |
說明 |
NUMBER(p[,s]) |
1-22字節。 P取值范圍1到38 S取值范圍-84到127 |
存儲定點數,值的絕對值范圍為1.0 x 10 -130至1.0 x 10 126。值大於等於1.0 x 10 126時報錯。p為有意義的10進制位數,正值s為小數位數,負值s表示四舍五入到小數點左部多少位。 |
BINARY_FLOAT |
5字節,其中有一長度字節。 |
32位單精度浮點數類型。 符號位1位,指數位8位,尾數位23位。 |
BINARY_DOUBLE |
9字節,其中有一長度字節。 |
64位雙精度浮點數類型。 |
3. 時間、時間間隔類型
時間字段可取值范圍:
時間字段 |
時間類型有效值 |
時間間隔類型有效值 |
YEAR |
-4712至9999,包括0 |
任何整數 |
MONTH |
01至12 |
0至11 |
DAY |
01至31 |
任何整數 |
HOUR |
00 至 23 |
0 至 23 |
MINUTE |
00 至 59 |
0至 59 |
SECOND |
00 to 59.9(n),9(n)不適用與DATE類型 |
0 to 59.9(n) |
TIMEZONE_HOUR |
-1至14,不適用與DATE和TIMESTAMP類型 |
不可用 |
TIMEZONE_MINUTE |
00至59,不適用與DATE和TIMESTAMP類型 |
不可用 |
TIMEZONE_REGION |
|
不可用 |
TIMEZONE_ABBR |
|
不可用 |
時間、時間間隔類型:
數據類型 |
長度 |
說明 |
DATE |
7字節 |
默認值為SYSDATE的年、月,日為01。包含一個時間字段,若插入值沒有時間字段,則默認值為:00:00:00 or 12:00:00 for 24-hour and 12-hour clock time。沒有分秒和時間區。 |
TIMESTAMP [(fractional_seconds_precision)] |
7至11字節 |
fractional_seconds_precision為Oracle存儲秒值小數部分位數,默認為6,可選值為0到9。沒有時間區。 |
TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE |
13字節 |
使用UTC,包含字段YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, TIMEZONE_ HOUR, TIMEZONE_MINUTE |
TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE |
7至11字節 |
存時使用數據庫時區,取時使用回話的時區。 |
INTERVAL YEAR [(year_precision)] TO MONTH |
5字節 |
包含年、月的時間間隔類型。year_precision是年字段的數字位數,默認為2,可取0至9。 |
INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)] |
11字節 |
day_precision是月份字段的數字位數,默認為2,可取0至9。 |
- TO_DATE()、DATE使用的時間字段值都是午夜值。或者使用TRUNC()函數進行過濾,確保時間字段為午夜值。
- 時間和時間間隔類型操作規則:
在DATE和TIMESTAMP(會被轉化為DATE類型值)類型上加、減NUMBER類型常量,該常量單位為天數。
所有TIMESTAMP類型運算都以UTC時間為准。即對於TIMESTAMP WITH LOCAL TIME ZONE來說,先轉化為UTC時間,計算完成后再轉化回來。
- INTERVAL YEAR TO MONTH常量:
INTERVAL‘year-month’YEAR/MONTH(precision) TO MONTH
year位數超過precision時,返回一個錯誤。
其中precision為最大的位數,默認為2,可取0到9。
例子:INTERVAL '123-2' YEAR(3) TO MONTH 、
INTERVAL '123' YEAR(3) 、
INTERVAL '300' MONTH(3)。
- INTERVAL DAY TO SECOND常量:
INTERVAL ‘n/time_expr/n time_expr’ DAY/HOUR/MINUTE(leading_precision) TO HOUR/MINUTE/SECOND(fractional_second_precision)
INTERVAL ‘n/time_expr’ SECOND(leading_precision, fractional_second_precision)
time_expr格式:HH[:MI[:SS[.n]]] or MI[:SS[.n]] or SS[.n] 若n大於分秒精度,則四舍五入n。
只有當第一個字段是DAY時,才可以使用n time_expr。
leading_precision默認為2,可取0至9。
4. 大對象類型
數據類型 |
長度 |
說明 |
BLOB |
最大為(4GB-1)*數據庫塊大小 |
存儲非結構化二進制文件。支持事務處理。 |
CLOB |
最大為(4GB-1)*數據庫塊大小 |
存儲單字節或者多字節字符數據。支持事務處理。 |
NCLOB |
最大為(4GB-1)*數據庫塊大小 |
存儲Unicode數據。支持事務處理。 |
BFILE |
最大為2 32-1字節 |
LOB地址指向文件系統上的一個二進制文件,維護目錄和文件名。不參與事務處理。只支持只讀操作。 |
- LOB列包含一個LOB地址,指向數據庫內或者數據庫外的LOB類型值。
5. 其他類型
數據類型 |
長度 |
說明 |
LONG |
最大為2GB |
變長類型,存儲字符串。創建表時不要使用該類型。 |
RAW(n) |
最大2000字節,n為字節數,必須指定n |
變長類型,字符集發生變化時不會改變值。 |
LONG RAW |
最大為2GB |
變長類型,不建議使用,建議轉化為BLOB類型,字符集發生變化時不會改變值。 |
ROWID |
10字節 |
代表記錄的地址。顯示為18位的字符串。用於定位數據庫中一條記錄的一個相對唯一地址值。通常情況下,該值在該行數據插入到數據庫表時即被確定且唯一。 |
UROWID(n) |
|
|
- ROWID:數據對象編號32位(6個字符)、文件編號10位(3個字符)、塊編號22位(6個字符)、行編號16位(3個字符)
- 使用dqms_rowid包獲得ROWID信息:
select dbms_rowid.rowid_object(rowid) object_id, dbms_rowid.rowid_relative_fno(rowid) file_id, dbms_rowid.rowid_block_number(rowid) block_id, dbms_rowid.rowid_row_number(rowid) num from dept;