Oracle支持的數(shù)據(jù)類型可以分為三個(gè)基本種類:字符數(shù)據(jù)類型、數(shù)字?jǐn)?shù)據(jù)類型以及表示其它數(shù)據(jù)的數(shù)據(jù)類型。

    字符數(shù)據(jù)類型

    CHAR數(shù)據(jù)類型存儲(chǔ)固定長(zhǎng)度的字符值。一個(gè)CHAR數(shù)據(jù)類型可以包括1到2000個(gè)字符。如果對(duì)CHAR沒(méi)有明確地說(shuō)明長(zhǎng)度,它的默認(rèn)長(zhǎng)度則設(shè)置為1.如果對(duì)某個(gè)CHAR類型變量賦值,其長(zhǎng)度小于規(guī)定的長(zhǎng)度,那么Oracle自動(dòng)用空格填充。

    VARCHAR2存儲(chǔ)可變長(zhǎng)度的字符串。雖然也必須指定一個(gè)VARCHAR2數(shù)據(jù)變量的長(zhǎng)度,但是這個(gè)長(zhǎng)度是指對(duì)該變量賦值的的最大長(zhǎng)度而非實(shí)際賦值長(zhǎng)度。不需要用空格填充。最多可設(shè)置為4000個(gè)字節(jié)。所以如果存儲(chǔ)中文的時(shí)候,就不能存儲(chǔ)到4000個(gè)字符了,因?yàn)橐粋€(gè)漢字會(huì)占有多個(gè)字節(jié)。

    因?yàn)閂ARCHAR2數(shù)據(jù)類型只存儲(chǔ)為該列所賦的字符(不加空格),所以VARCHAR2需要的存儲(chǔ)空間比CHAR數(shù)據(jù)類型要小。

 

    Oracle推薦使用VARCHAR2

    NCHAR和NVARCHAR2數(shù)據(jù)類型分別存儲(chǔ)固定長(zhǎng)度與可變長(zhǎng)度的字符數(shù)據(jù),但是它們使用的是和數(shù)據(jù)庫(kù)其他類型不同的字符集。在創(chuàng)建數(shù)據(jù)庫(kù)時(shí),需要指定所使用的字符集,以便對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)進(jìn)行編碼。還可以指定一個(gè)輔助的字符集[即本地語(yǔ)言集(National Language Set,簡(jiǎn)稱NLS)]。NCHAR和NVARCHAR2類型的列使用輔助字符集。

    在Oracle9i中,可以以字符而不是字節(jié)為單位來(lái)表示NCHAR和NVARCHAR2列的長(zhǎng)度。

    LONG數(shù)據(jù)類型可以存放2GB的字符數(shù)據(jù),它是從早期版本中繼承來(lái)的。現(xiàn)在如果想存儲(chǔ)大容量的數(shù)據(jù),Oracle推薦使用CLOB和NCLOB數(shù)據(jù)類型。在表和SQL語(yǔ)句中使用LONG類型有許多限制。

    CLOB和NCLOB數(shù)據(jù)類型可以存儲(chǔ)多達(dá)4GB的字符數(shù)據(jù)。NCLOB數(shù)據(jù)類型可存儲(chǔ)NLS數(shù)據(jù)。

 

    數(shù)字?jǐn)?shù)據(jù)類型

    Oracle使用標(biāo)準(zhǔn)、可變長(zhǎng)度的內(nèi)部格式來(lái)存儲(chǔ)數(shù)字。這個(gè)內(nèi)部格式精度可以高達(dá)38位。

    NUMBER數(shù)據(jù)類型可以有兩個(gè)限定符,如:

    column NUMBER ( precision, scale)

    precision表示數(shù)字中的有效位。如果沒(méi)有指定precision的話,Oracle將使用38作為精度。

    scale表示數(shù)字小數(shù)點(diǎn)右邊的位數(shù),scale默認(rèn)設(shè)置為0。如果把scale設(shè)成負(fù)數(shù),Oracle將把該數(shù)字取舍到小數(shù)點(diǎn)左邊的指定位數(shù)。

 

    日期數(shù)據(jù)類型

    Oracle標(biāo)準(zhǔn)日期格式為:DD-MON-YY  HH:MI:SS

    通過(guò)修改實(shí)例的參數(shù)NLS_DATE_FORMAT,可以改變實(shí)例中插入日期的格式。在一個(gè)會(huì)話期間,可以通過(guò)ALTER SESSION SQL命令來(lái)修改日期,或者通過(guò)使用SQL語(yǔ)句的TO_DATE表達(dá)式中的參數(shù)來(lái)更新一個(gè)特定值。

 

    其它的數(shù)據(jù)類型

    RAW和LONG RAW數(shù)據(jù)類型主要用于對(duì)數(shù)據(jù)庫(kù)進(jìn)行解釋。指定這兩種類型時(shí),Oracle以位的形式來(lái)存儲(chǔ)數(shù)據(jù)。RAW數(shù)據(jù)類型一般用于存儲(chǔ)有特定格式的對(duì)象,如位圖。 RAW數(shù)據(jù)類型可占用2KB的空間,而LONG RAW數(shù)據(jù)類型則可以占用2GB大小。

    ROWID ROWID是一種特殊的列類型,稱之為偽列(pseudocolumn)。ROWID偽列在SQL SELECT語(yǔ)句中可以像普通列那樣被訪問(wèn)。Oracle數(shù)據(jù)庫(kù)中每行都有一個(gè)偽列。ROWID表示行的地址,ROWID偽列用ROWID數(shù)據(jù)類型定義。

    ROWID與磁盤驅(qū)動(dòng)的特定位置有關(guān),因此,ROWID是獲得行的最快方法。但是,行的ROWID會(huì)隨著卸載和重載數(shù)據(jù)庫(kù)而發(fā)生變化,因此建議不要在事務(wù) 中使用ROWID偽列的值。例如,一旦當(dāng)前應(yīng)用已經(jīng)使用完記錄,就沒(méi)有理由保存行的ROWID.不能通過(guò)任何SQL語(yǔ)句來(lái)設(shè)置標(biāo)準(zhǔn)的ROWID偽列的值。

    列或變量可以定義成ROWID數(shù)據(jù)類型,但是Oracle不能保證該列或變量的值是一個(gè)有效的ROWID.

    LOB

    LOB(大型對(duì)象)數(shù)據(jù)類型,可以保存4GB的信息。LOB有以下3種類型:

    。CLOB,只能存儲(chǔ)字符數(shù)據(jù)

    。NCLOB,保存本地語(yǔ)言字符集數(shù)據(jù)

    。BLOB,以二進(jìn)制信息保存數(shù)據(jù)

    可以指定將一個(gè)LOB數(shù)據(jù)保存在Oracle數(shù)據(jù)庫(kù)內(nèi),還是指向一個(gè)包含次數(shù)據(jù)的外部文件。

    LOB可以參與事務(wù)。管理LOB中的數(shù)據(jù)必須通過(guò)DBMS_LOB PL/SQL內(nèi)置軟件包或者OCI接口。

    為了便于將LONG數(shù)據(jù)類型轉(zhuǎn)換成LOB,Oracle9i包含許多同時(shí)支持LOB和LONG的函數(shù),還包括一個(gè)ALTER TABLE語(yǔ)句的的新選擇,它允許將LONG數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換成LOB.

    BFILE

    BFILE數(shù)據(jù)類型用做指向存儲(chǔ)在Oracle數(shù)據(jù)庫(kù)以外的文件的指針。

    XMLType

    作為對(duì)XML支持的一部分,Oracle9i包含了一個(gè)新的數(shù)據(jù)類型XMLType.定義為XMLType的列將存儲(chǔ)一個(gè)在字符LOB列中的XML文檔。有許多內(nèi)置的功能可以使你從文當(dāng)中抽取單個(gè)節(jié)點(diǎn),還可以在XMLType文檔中對(duì)任何節(jié)點(diǎn)創(chuàng)建索引。

    用戶自定義數(shù)據(jù)

    從Oracle8以后,用戶可以定義自己的復(fù)雜數(shù)據(jù)類型,它們由Oracle基本數(shù)據(jù)類型組合而成。

    AnyType、AnyData和AnyDataSet

    Oracle包括3個(gè)新的數(shù)據(jù)類型,用于定義在現(xiàn)有數(shù)據(jù)類型之外的數(shù)據(jù)結(jié)構(gòu)。其中每種數(shù)據(jù)類型必須用程序單元來(lái)定義,以便讓Oracle9i知道如何處理這些類型的特定實(shí)現(xiàn)。

    額外的:

    類型轉(zhuǎn)換

    Oracle會(huì)自動(dòng)將某些數(shù)據(jù)類型轉(zhuǎn)換成其他的數(shù)據(jù)類型,轉(zhuǎn)換取決于包括該值的SQL語(yǔ)句。

    數(shù)據(jù)轉(zhuǎn)換還可以通過(guò)Oracle的類型轉(zhuǎn)換函數(shù)顯示地進(jìn)行。

 

    連接與比較

    在大多數(shù)平臺(tái)上Oracle SQL中的連接操作符用兩條豎線(||)表示。連接是將兩個(gè)字符值連接。Oracle的自動(dòng)類型轉(zhuǎn)換功能使得兩個(gè)數(shù)字值也可以進(jìn)行連接。

 

    NULL

    NULL值是關(guān)系數(shù)據(jù)庫(kù)的重要特征之一。實(shí)際上,NULL不代表任何值,它表示沒(méi)有值。如果要?jiǎng)?chuàng)建表的一個(gè)列,而這個(gè)列必須有值,那么應(yīng)將它指定為NOT NULL,這表示該列不能包含NULL值。

    任何數(shù)據(jù)類型都可以賦予NULL值。NULL值引入了SQL運(yùn)算的三態(tài)邏輯。如果比較的一方是NULL值,那么會(huì)出現(xiàn)3種狀態(tài):TURE、FALSE以及兩者都不是。

    因?yàn)镹ULL值不等于0或其他任何值,所以測(cè)試某個(gè)數(shù)據(jù)是否為NULL值只能通過(guò)關(guān)系運(yùn)算符IS NULL來(lái)進(jìn)行。

    NULL值特別適合以下情況:當(dāng)一個(gè)列還未賦值時(shí)。如果選擇不使用NULL值,那么必須對(duì)行的所有列都要賦值。這實(shí)際上也取消了某列不需要值的可能性,同時(shí)對(duì)它賦的值也很容易產(chǎn)生誤解。這種情況則可能誤導(dǎo)終端用戶,并且導(dǎo)致累計(jì)操作的錯(cuò)誤結(jié)果。

參考:

《Oracle數(shù)據(jù)類型》,http://www.cnblogs.com/cxd4321/archive/2008/04/14/1153201.html


文章來(lái)源:http://localhost/wp2/?p=122