字段類型 中文說明 限制條件 其它說明 數據庫
CHAR 固定長度字符串 最大長度2000 bytes session
VARCHAR2 可變長度的字符串 最大長度4000 bytes 可作索引的最大長度749 數據結構
NCHAR 根據字符集而定的固定長度字符串 最大長度2000 bytes 函數
NVARCHAR2 根據字符集而定的可變長度字符串 最大長度4000 bytes 測試
DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS) 通過嚴格測試,無千蟲問題 編碼
LONG 超長字符串 最大長度2G(231-1) 足夠存儲大部頭著做 操作系統
RAW 固定長度的二進制數據 最大長度2000 bytes 可存放多媒體圖象聲音等 指針
LONG RAW 可變長度的二進制數據 最大長度2G 同上 視頻
BLOB 二進制數據 最大長度4G 對象
CLOB 字符數據 最大長度4G
NCLOB 根據字符集而定的字符數據 最大長度4G
BFILE 存放在數據庫外的二進制數據 最大長度4G
ROWID 數據表中記錄的惟一行號 10 bytes ********.****.****格式,*爲0或1
NROWID 二進制數據表中記錄的惟一行號 最大長度4000 bytes
NUMBER(P,S) 數字類型 P爲整數位,S爲小數位
DECIMAL(P,S) 數字類型 P爲整數位,S爲小數位
INTEGER 整數類型 小的整數
FLOAT 浮點數類型 NUMBER(38),雙精度
REAL 實數類型 NUMBER(63),精度更高
數據類型 參數 描述
char(n) n=1 to 2000字節 定長字符串,n字節長,若是不指定長度,缺省爲1個字節長(一個漢字爲2字節)
varchar2(n) n=1 to 4000字節 可變長的字符串,具體定義時指明最大長度n,
這種數據類型能夠放數字、字母以及ASCII碼字符集(或者EBCDIC等數據庫系統接受的字符集標準)中的全部符號。
若是數據長度沒有達到最大值n,Oracle 8i會根據數據大小自動調節字段長度,
若是你的數據先後有空格,Oracle 8i會自動將其刪去。VARCHAR2是最經常使用的數據類型。
可作索引的最大長度3209。
number(m,n) m=1 to 38
n=-84 to 127 可變長的數值列,容許0、正值及負值,m是全部有效數字的位數,n是小數點之後的位數。
如:number(5,2),則這個字段的最大值是99,999,若是數值超出了位數限制就會被截取多餘的位數。
如:number(5,2),但在一行數據中的這個字段輸入575.316,則真正保存到字段中的數值是575.32。
如:number(3,0),輸入575.316,真正保存的數據是575。
date 無 從公元前4712年1月1日到公元4712年12月31日的全部合法日期,
Oracle 8i其實在內部是按7個字節來保存日期數據,在定義中還包括小時、分、秒。
缺省格式爲DD-MON-YY,如07-11月-00 表示2000年11月7日。
long 無 可變長字符列,最大長度限制是2GB,用於不須要做字符串搜索的長串數據,若是要進行字符搜索就要用varchar2類型。
long是一種較老的數據類型,未來會逐漸被BLOB、CLOB、NCLOB等大的對象數據類型所取代。
raw(n) n=1 to 2000 可變長二進制數據,在具體定義字段的時候必須指明最大長度n,Oracle 8i用這種格式來保存較小的圖形文件或帶格式的文本文件,如Miceosoft Word文檔。
raw是一種較老的數據類型,未來會逐漸被BLOB、CLOB、NCLOB等大的對象數據類型所取代。
long raw 無 可變長二進制數據,最大長度是2GB。Oracle 8i用這種格式來保存較大的圖形文件或帶格式的文本文件,如Miceosoft Word文檔,以及音頻、視頻等非文本文件。
在同一張表中不能同時有long類型和long raw類型,long raw也是一種較老的數據類型,未來會逐漸被BLOB、CLOB、NCLOB等大的對象數據類型所取代。
blob
clob
nclob 無 三種大型對象(LOB),用來保存較大的圖形文件或帶格式的文本文件,如Miceosoft Word文檔,以及音頻、視頻等非文本文件,最大長度是4GB。
LOB有幾種類型,取決於你使用的字節的類型,Oracle 8i實實在在地將這些數據存儲在數據庫內部保存。
能夠執行讀取、存儲、寫入等特殊操做。
bfile 無 在數據庫外部保存的大型二進制對象文件,最大長度是4GB。
這種外部的LOB類型,經過數據庫記錄變化狀況,可是數據的具體保存是在數據庫外部進行的。
Oracle 8i能夠讀取、查詢BFILE,可是不能寫入。
大小由操做系統決定。
數據類型是列或存儲過程當中的一個屬性。
Oracle支持的數據類型能夠分爲三個基本種類:字符數據類型、數字數據類型以及表示其它數據的數據類型。
字符數據類型
CHAR char數據類型存儲固定長度的字符值。一個CHAR數據類型能夠包括1到2000個字符。若是對CHAR沒有明確地說明長度,它的默認長度則設置爲1。若是對某個CHAR類型變量賦值,其長度小於規定的長度,那麼Oracle自動用空格填充。
VARCHAR2 存儲可變長度的字符串。雖然也必須指定一個VARCHAR2數據變量的長度,可是這個長度是指對該變量賦值的最大長度而非實際賦值長度。不需用空格填充。最多可設置爲4000個字符。由於VARCHAR2數據類型只存儲爲該列所賦的字符(不加空格),因此VARCHAR2須要的存儲空間比CHAR數據類型要小。
Oracle推薦使用VARCHAR2
NCHAR和NVARCHAR2 NCHAR和NVARCHAR2數據類型分別存儲固定長度與可變長度的字符串,可是它們使用的是和數據庫其餘類型不一樣的字符集。在建立數據庫時,須要指定所使用的字符集,以便對數據中數據進行編碼。還能夠指定一個輔助的字符集[即本地語言集]。NCHAR和NVARCHAR2類型的列使用輔助字符集。NCHAR和NVARCHAR2類型的列使用輔助字符集。
在Oracle 9i中,能夠以字符而不是字節爲單位表示NCHAR和NVARCHAR2列的長度。
LONG long數據類型能夠存放2GB的字符數據,它是從早期版本中繼承下來的。如今若是存儲大容量的數據,Oracle推薦使用CLOB和NCLOB數據類型。在表和SQL語句中使用LONG類型有許多限制。
CLOB和NCLOB CLOB和NCLOB數據類型能夠存儲多達4GB的字符數據。NCLOB數據類型可存儲NLS數據。
數字數據類型
Oracle使用標準、可變長度的內部格式來存儲數字。這個內部格式精度能夠高達38位。
NUMBER數據類型能夠有兩個限定符,如:column NUMBER(precision,scale)。precision表示數字中的有效位。若是沒有指定precision的話,Oracle將使用38做爲精度。scale表示小數點右邊的位數,scale默認設置爲0。若是把scale設成負數,Oracle將把該數字取捨到小數點左邊的指定位數。
日期數據類型
Oracle標準日期格式爲:DD-MON-YY HH:MI:SS
經過修改實例的參數NLS_DATE_FORMAT,能夠改變實例中插入日期的格式。在一個會話期間,能夠經過Alter session SQL命令來修改日期,或者經過使用SQL語句的TO_DATE表達式中的參數來更新一個特定值。
其它的數據類型
RAW和LONG RAW RAW和LONG RAW數據類型主要用於對數據庫進行解釋。指定這兩種類型時,Oracle以位的形式來存儲數據。RAW數據類型通常用於存儲有特定格式的對象,如位圖。RAW數據類型可佔用2KB的空間,而LONG RAW數據類型則能夠佔用2GB大小。
ROWID ROWID是一種特殊的列類型,稱之爲僞列(pseudocolumn)。ROWID僞列在SQL SELECT語句中能夠像普通列那樣被訪問。Oracle數據庫中每行都有一個僞列。ROWID表示行的地址,ROWID僞列用ROWID數據類型定義。
ROWID與磁盤驅動的特定位置有關,所以,ROWID是得到行的最快方法。可是,行的ROWID會隨着卸載和重載數據庫而發生變化,所以建議不要在事務中使用ROWID僞列的值。例如,一旦當前應用已經使用完記錄,就沒有理由保存行的ROWID。不能經過任何SQL語句來設置標準的ROWID僞列的值。
列或變量能夠定義成ROWID數據類型,可是Oracle不能保證該列或變量的值是一個有效的ROWID。
LOB(大型對象)數據類型,能夠保存4GB的信息。LOB有如下3中類型:
<CLOB>,只能存儲字符數據
<NCLOB>,保存本地語言字符集數據
<BLOB> ,以二進制信息保存數據
能夠指定將一個LOB數據保存在Oracle數據庫內,仍是指向一個包含次數據的外部文件。
LOB能夠參與事務。管理LOB中的數據必須經過DBMS_LOB PL/SQL內置軟件包或者OGI接口。
爲了便於將LONG數據類型轉換成LOB,Oracle 9i包含許多同時支持LOB和LONG的函數,喊包括一個ALTER TABLE語句的新選擇,它容許將LONG數據類型自動轉換成LOB。
BFILE
BFILE數據類型用作指向存儲在Oracle數據庫之外的文件的指針。
XML Type
做爲對XML支持的一部分,Oracle 9i包含了一個新的數據類型XML Type。定義爲XMLType的列將存儲一個字符LOB列中的XML文檔。有許多內置的功能可使你從文檔中抽取單個節點,還能夠在XML Type文檔中對任何節點建立索引。
用戶自定義數據
從Oracle 8之後,用戶能夠定義本身的複雜數據類型,它們由Oracle基本數據類型組合而成。
AnyType、AnyData和AnyDataSet
Oracle包括3個新的數據類型,用於定義在現有數據類型以外的數據結構。其中每種數據類型必須用程序單元來定義,以便讓Oracle9i知道如何處理這些類型的特定實現。
類型轉換
Oracle會自動將某些數據類型轉換成其餘的數據類型,轉換取決於包括該值的SQL語句。
數據轉換還能夠經過Oracle的類型轉換函數顯示地進行。
鏈接與比較
在大多數平臺上Oracle SQL中的鏈接操做符用兩條豎線(||)表示。鏈接是將兩個字符值鏈接。Oracle的自動類型轉換功能使得兩個數字值也能夠進行鏈接。
NULL
NULL值是關係數據庫的重要特徵之一。實際上,NULL不表明任何值,它表示沒有值。若是要建立表的一個列,而這個列必須有值,那麼應將它指定爲NOT NULL,這表示該列不能包含NULL值。
任何數據類型均可以賦予NULL值。NULL值引入了SQL運算的三態邏輯。若是比較的一方是NULL值,那麼會出現3種狀態:TURE、FALSE以及二者都不是。
由於NULL值不等於0或其餘任何值,因此測試某個數據是否爲NULL值只能經過關係運算符IS NULL來進行。
NULL值特別適合如下狀況:當一個列還未賦值時。若是選擇不使用NULL值,那麼必須對行的全部列都要賦值。這實際上也取消了某列不須要值的可能性,同時對它賦的值也很容易產生誤解。這種狀況則可能誤導終端用戶,而且致使累計操做的錯誤結果。
number(p,s)
p:1~38
s:-84~127
p>0,對s分2種狀況:1. s>0
精確到小數點右邊s位,並四捨五入。而後檢驗有效數位是否<=p;若是s>p,小數點右邊至少有s-p個0填充。
2. s<0
精確到小數點左邊s位,並四捨五入。而後檢驗有效數位是否<=p+|s|
123.2564 NUMBER 123.2564
1234.9876 NUMBER(6,2) 1234.99
12345.12345 NUMBER(6,2) Error
1234.9876 NUMBER(6) 1235
12345.345 NUMBER(5,-2) 12300
1234567 NUMBER(5,-2) 1234600
12345678 NUMBER(5,-2) Error
123456789 NUMBER(5,-4) 123460000
1234567890 NUMBER(5,-4) Error
12345.58 NUMBER(*, 1) 12345.6
0.1 NUMBER(4,5) Error
0.01234567 NUMBER(4,5) 0.01235
0.09999 NUMBER(4,5) 0.09999