Oracle支持的數(shù)據(jù)類型可以分為三個基本種類:字符數(shù)據(jù)類型、數(shù)字數(shù)據(jù)類型以及表示其它數(shù)據(jù)的數(shù)據(jù)類型。
字符數(shù)據(jù)類型
CHAR數(shù)據(jù)類型存儲固定長度的字符值。一個CHAR數(shù)據(jù)類型可以包括1到2000個字符。如果對CHAR沒有明確地說明長度,它的默認長度則設置為1.如果對某個CHAR類型變量賦值,其長度小于規(guī)定的長度,那么Oracle自動用空格填充。
VARCHAR2存儲可變長度的字符串。雖然也必須指定一個VARCHAR2數(shù)據(jù)變量的長度,但是這個長度是指對該變量賦值的的最大長度而非實際賦值長度。不需要用空格填充。最多可設置為4000個字節(jié)。所以如果存儲中文的時候,就不能存儲到4000個字符了,因為一個漢字會占有多個字節(jié)。
因為VARCHAR2數(shù)據(jù)類型只存儲為該列所賦的字符(不加空格),所以VARCHAR2需要的存儲空間比CHAR數(shù)據(jù)類型要小。
Oracle推薦使用VARCHAR2
NCHAR和NVARCHAR2數(shù)據(jù)類型分別存儲固定長度與可變長度的字符數(shù)據(jù),但是它們使用的是和數(shù)據(jù)庫其他類型不同的字符集。在創(chuàng)建數(shù)據(jù)庫時,需要指定所使用的字符集,以便對數(shù)據(jù)庫中數(shù)據(jù)進行編碼。還可以指定一個輔助的字符集[即本地語言集(National Language Set,簡稱NLS)]。NCHAR和NVARCHAR2類型的列使用輔助字符集。
在Oracle9i中,可以以字符而不是字節(jié)為單位來表示NCHAR和NVARCHAR2列的長度。
LONG數(shù)據(jù)類型可以存放2GB的字符數(shù)據(jù),它是從早期版本中繼承來的。現(xiàn)在如果想存儲大容量的數(shù)據(jù),Oracle推薦使用CLOB和NCLOB數(shù)據(jù)類型。在表和SQL語句中使用LONG類型有許多限制。
CLOB和NCLOB數(shù)據(jù)類型可以存儲多達4GB的字符數(shù)據(jù)。NCLOB數(shù)據(jù)類型可存儲NLS數(shù)據(jù)。
數(shù)字數(shù)據(jù)類型
Oracle使用標準、可變長度的內(nèi)部格式來存儲數(shù)字。這個內(nèi)部格式精度可以高達38位。
NUMBER數(shù)據(jù)類型可以有兩個限定符,如:
column NUMBER ( precision, scale)
precision表示數(shù)字中的有效位。如果沒有指定precision的話,Oracle將使用38作為精度。
scale表示數(shù)字小數(shù)點右邊的位數(shù),scale默認設置為0。如果把scale設成負數(shù),Oracle將把該數(shù)字取舍到小數(shù)點左邊的指定位數(shù)。
日期數(shù)據(jù)類型
Oracle標準日期格式為:DD-MON-YY HH:MI:SS
通過修改實例的參數(shù)NLS_DATE_FORMAT,可以改變實例中插入日期的格式。在一個會話期間,可以通過ALTER SESSION SQL命令來修改日期,或者通過使用SQL語句的TO_DATE表達式中的參數(shù)來更新一個特定值。
其它的數(shù)據(jù)類型
RAW和LONG RAW數(shù)據(jù)類型主要用于對數(shù)據(jù)庫進行解釋。指定這兩種類型時,Oracle以位的形式來存儲數(shù)據(jù)。RAW數(shù)據(jù)類型一般用于存儲有特定格式的對象,如位圖。 RAW數(shù)據(jù)類型可占用2KB的空間,而LONG RAW數(shù)據(jù)類型則可以占用2GB大小。
ROWID ROWID是一種特殊的列類型,稱之為偽列(pseudocolumn)。ROWID偽列在SQL SELECT語句中可以像普通列那樣被訪問。Oracle數(shù)據(jù)庫中每行都有一個偽列。ROWID表示行的地址,ROWID偽列用ROWID數(shù)據(jù)類型定義。
ROWID與磁盤驅(qū)動的特定位置有關,因此,ROWID是獲得行的最快方法。但是,行的ROWID會隨著卸載和重載數(shù)據(jù)庫而發(fā)生變化,因此建議不要在事務 中使用ROWID偽列的值。例如,一旦當前應用已經(jīng)使用完記錄,就沒有理由保存行的ROWID.不能通過任何SQL語句來設置標準的ROWID偽列的值。
列或變量可以定義成ROWID數(shù)據(jù)類型,但是Oracle不能保證該列或變量的值是一個有效的ROWID.
LOB
LOB(大型對象)數(shù)據(jù)類型,可以保存4GB的信息。LOB有以下3種類型:
。CLOB,只能存儲字符數(shù)據(jù)
。NCLOB,保存本地語言字符集數(shù)據(jù)
。BLOB,以二進制信息保存數(shù)據(jù)
可以指定將一個LOB數(shù)據(jù)保存在Oracle數(shù)據(jù)庫內(nèi),還是指向一個包含次數(shù)據(jù)的外部文件。
LOB可以參與事務。管理LOB中的數(shù)據(jù)必須通過DBMS_LOB PL/SQL內(nèi)置軟件包或者OCI接口。
為了便于將LONG數(shù)據(jù)類型轉(zhuǎn)換成LOB,Oracle9i包含許多同時支持LOB和LONG的函數(shù),還包括一個ALTER TABLE語句的的新選擇,它允許將LONG數(shù)據(jù)類型自動轉(zhuǎn)換成LOB.
BFILE
BFILE數(shù)據(jù)類型用做指向存儲在Oracle數(shù)據(jù)庫以外的文件的指針。
XMLType
作為對XML支持的一部分,Oracle9i包含了一個新的數(shù)據(jù)類型XMLType.定義為XMLType的列將存儲一個在字符LOB列中的XML文檔。有許多內(nèi)置的功能可以使你從文當中抽取單個節(jié)點,還可以在XMLType文檔中對任何節(jié)點創(chuàng)建索引。
用戶自定義數(shù)據(jù)
從Oracle8以后,用戶可以定義自己的復雜數(shù)據(jù)類型,它們由Oracle基本數(shù)據(jù)類型組合而成。
AnyType、AnyData和AnyDataSet
Oracle包括3個新的數(shù)據(jù)類型,用于定義在現(xiàn)有數(shù)據(jù)類型之外的數(shù)據(jù)結(jié)構(gòu)。其中每種數(shù)據(jù)類型必須用程序單元來定義,以便讓Oracle9i知道如何處理這些類型的特定實現(xiàn)。
額外的:
類型轉(zhuǎn)換
Oracle會自動將某些數(shù)據(jù)類型轉(zhuǎn)換成其他的數(shù)據(jù)類型,轉(zhuǎn)換取決于包括該值的SQL語句。
數(shù)據(jù)轉(zhuǎn)換還可以通過Oracle的類型轉(zhuǎn)換函數(shù)顯示地進行。
連接與比較
在大多數(shù)平臺上Oracle SQL中的連接操作符用兩條豎線(||)表示。連接是將兩個字符值連接。Oracle的自動類型轉(zhuǎn)換功能使得兩個數(shù)字值也可以進行連接。
NULL
NULL值是關系數(shù)據(jù)庫的重要特征之一。實際上,NULL不代表任何值,它表示沒有值。如果要創(chuàng)建表的一個列,而這個列必須有值,那么應將它指定為NOT NULL,這表示該列不能包含NULL值。
任何數(shù)據(jù)類型都可以賦予NULL值。NULL值引入了SQL運算的三態(tài)邏輯。如果比較的一方是NULL值,那么會出現(xiàn)3種狀態(tài):TURE、FALSE以及兩者都不是。
因為NULL值不等于0或其他任何值,所以測試某個數(shù)據(jù)是否為NULL值只能通過關系運算符IS NULL來進行。
NULL值特別適合以下情況:當一個列還未賦值時。如果選擇不使用NULL值,那么必須對行的所有列都要賦值。這實際上也取消了某列不需要值的可能性,同時對它賦的值也很容易產(chǎn)生誤解。這種情況則可能誤導終端用戶,并且導致累計操作的錯誤結(jié)果。
參考:
《Oracle數(shù)據(jù)類型》,http://www.cnblogs.com/cxd4321/archive/2008/04/14/1153201.html
文章來源:
http://localhost/wp2/?p=122