Oracle數(shù)據(jù)類型相關(guān)特性的介紹
我們都知道在Oracle8中定義了,關(guān)于標(biāo)量(SCALAR)復(fù)合(COMPOSITE)標(biāo)量(SCALAR)以及LOB四種相關(guān)的數(shù)據(jù)Oracle數(shù)據(jù)類型,下面就是對(duì)其特性的詳細(xì)介紹,希望會(huì)給你帶來(lái)一些幫助在此方面。
合法的標(biāo)量類型與數(shù)據(jù)庫(kù)的列所使用的Oracle數(shù)據(jù)類型相同,此外它還有一些擴(kuò)展它又分為七個(gè)組:數(shù)字字符行日期行標(biāo)識(shí)布爾和可信
數(shù)字,它有三種基本類型--NUMBERPLS_INTEGER和BINARY_INTENERNUMBER可以描述整數(shù)或?qū)崝?shù),而PLS_INTEGER和BINARY_INTENER只能描述整數(shù)
NUMBER,是以十進(jìn)制格式進(jìn)行存儲(chǔ)的,它便于存儲(chǔ),但是在計(jì)算上,系統(tǒng)會(huì)自動(dòng)的將它轉(zhuǎn)換成為二進(jìn)制進(jìn)行運(yùn)算的它的定義方式是NUMBER(P,S),P是精度,最大38位,S是刻度范圍,可在-84...127間取值例如:NUMBER(5,2)可以用來(lái)存儲(chǔ)表示-999.99...999.99間的數(shù)值PS可以在定義是省略,例如:NUMBER(5)NUMBER等;
BINARY_INTENER用來(lái)描述不存儲(chǔ)在數(shù)據(jù)庫(kù)中,但是需要用來(lái)計(jì)算的帶符號(hào)的整數(shù)值它以2的補(bǔ)碼二進(jìn)制形式表述循環(huán)計(jì)數(shù)器經(jīng)常使用這種Oracle數(shù)據(jù)類型
PLS_INTEGER和BINARY_INTENER唯一區(qū)別是在計(jì)算當(dāng)中發(fā)生溢出時(shí),BINARY_INTENER型的變量會(huì)被自動(dòng)指派給一個(gè)NUMBER型而不會(huì)出錯(cuò),PLS_INTEGER型的變量將會(huì)發(fā)生錯(cuò)誤
字符,包括CHARVARCHAR2(VARCHAR)LONGNCHAR和NVARCHAR2幾種類型
CHAR,描述定長(zhǎng)的字符串,如果實(shí)際值不夠定義的長(zhǎng)度,系統(tǒng)將以空格填充它的聲明方式如下CHAR(L),L為字符串長(zhǎng)度,缺省為1,作為變量最大32767個(gè)字符,作為數(shù)據(jù)存儲(chǔ)在Oracle8中最大為2000
VARCHAR2(VARCHAR),描述變長(zhǎng)字符串它的聲明方式如下VARCHAR2(L),L為字符串長(zhǎng)度,沒有缺省值,作為變量最大32767個(gè)字節(jié),作為數(shù)據(jù)存儲(chǔ)在Oracle8中最大為4000在多字節(jié)語(yǔ)言環(huán)境中,實(shí)際存儲(chǔ)的字符個(gè)數(shù)可能小于L值。
例如:當(dāng)語(yǔ)言環(huán)境為中文(SIMPLIFIED CHINESE_CHINA.ZHS16GBK)時(shí),一個(gè)VARCHAR2(200)的數(shù)據(jù)列可以保存200個(gè)英文字符或者100個(gè)漢字字符
LONG,在數(shù)據(jù)庫(kù)存儲(chǔ)中可以用來(lái)保存高達(dá)2G的數(shù)據(jù),作為變量,可以表示一個(gè)最大長(zhǎng)度為32760字節(jié)的可變字符串
NCHARNVARCHAR2,國(guó)家字符集,與環(huán)境變量NLS指定的語(yǔ)言集密切相關(guān),使用方法和CHARVARCHAR2相同
行,包括RAW和LONG RAW兩種類型用來(lái)存儲(chǔ)二進(jìn)制數(shù)據(jù),不會(huì)在字符集間轉(zhuǎn)換
RAW,類似于CHAR,聲明方式RAW(L),L為長(zhǎng)度,以字節(jié)為單位,作為數(shù)據(jù)庫(kù)列最大2000,作為變量最大32767字節(jié)
LONG RAW,類似于LONG,作為數(shù)據(jù)庫(kù)列最大存儲(chǔ)2G字節(jié)的數(shù)據(jù),作為變量最大32760字節(jié)
日期,只有一種類型--DATE,用來(lái)存儲(chǔ)時(shí)間信息,站用7個(gè)字節(jié)(從世紀(jì)到秒),絕對(duì)沒有千年蟲問題
行標(biāo)識(shí),只有一種Oracle數(shù)據(jù)類型--ROWID,用來(lái)存儲(chǔ)行標(biāo)識(shí)符,可以利用ROWIDTOCHAR函數(shù)來(lái)將行標(biāo)識(shí)轉(zhuǎn)換成為字符
布爾,只有一種類型--BOOLEAN,僅僅可以表示TRUEFALSE或者NULL
可信,只有一種類型--MLSLABEL,可以在TRUSTED Oracle中用來(lái)保存可變長(zhǎng)度的二進(jìn)制標(biāo)簽在標(biāo)準(zhǔn)Oracle中,只能存儲(chǔ)NULL值
復(fù)合(COMPOSITE)
標(biāo)量類型是經(jīng)過預(yù)定義的,利用這些類型可以衍生出一些復(fù)合類型主要有記錄表
記錄,可以看作是一組標(biāo)量的組合結(jié)構(gòu),它的聲明方式如下:
- TYPE record_type_name IS RECORD
- ( filed1 type1 [NOT NULL] [:=expr1]
- .......
- filedn typen [NOT NULL] [:=exprn] )
其中,record_type_name是記錄類型的名字(是不是看著象CREATE TABLE?......)引用時(shí)必須定義相關(guān)的變量,記錄只是TYPE,不是VARIABLE
表,不是物理存儲(chǔ)數(shù)據(jù)的表,在這里是一種變量Oracle數(shù)據(jù)類型,也稱為PL/SQL表,它類似于C語(yǔ)言中的數(shù)組,在處理方式上也相似它的聲明方式如下:
- TYPE table_type_name IS TABLE OF scalar_type INDEX BY BINARY_INTENER;
其中,table_type_name是類型的名字,scalar_type是一種標(biāo)量類型的類型聲明引用時(shí)也必須定義相關(guān)的變量表和數(shù)組不同,表有兩列,KEY和VALUE,KEY就是定義時(shí)聲明的BINARY_INTENER,VALUE就是定義時(shí)聲明的scalar_type
除了記錄和表之外,還有對(duì)象類型集合(嵌套表和VARRAYS)等類型,這些將專門講解
在PL/SQL8.0之前,只有一種類型--REF CURSOR,也就是游標(biāo)它的定義較為簡(jiǎn)單,
- CURSOR cursor_name IS select .....from.....;
在PL/SQL8.0之后,引入了REF類型,它指向一個(gè)對(duì)象這種類型將單獨(dú)講解(等我弄明白再說,免得在高人面前......)
LOB變量主要是用來(lái)存儲(chǔ)大量數(shù)據(jù)的數(shù)據(jù)庫(kù)字段,最大可以存儲(chǔ)4G字節(jié)的內(nèi)容(這么大,存VCD?,浪費(fèi)?。┲饕校?/p>
CLOB:和Oracle7中的LONGOracle數(shù)據(jù)類型相似,存儲(chǔ)單字節(jié)字符數(shù)據(jù)(別用來(lái)存中文喔)
NCLOB:用來(lái)存儲(chǔ)定寬多字節(jié)字符數(shù)據(jù)(例如:存嘯傲江湖就挺好)
BLOB:和LONG RAW相似,用來(lái)存儲(chǔ)無(wú)結(jié)構(gòu)的二進(jìn)制數(shù)據(jù)
BFILE:它用來(lái)允許Oracle對(duì)數(shù)據(jù)庫(kù)外存儲(chǔ)的大型二進(jìn)制文本進(jìn)行只讀形式的訪問
【編輯推薦】
- Oracle 11g中最具有獨(dú)特點(diǎn)的5大特點(diǎn)
- Oracle數(shù)據(jù)庫(kù)的四種實(shí)用性很強(qiáng)的啟動(dòng)方式
- 九大Oracle性能優(yōu)化基本方法詳解
- Oracle數(shù)據(jù)庫(kù)保持其優(yōu)良性的手段有哪些
- Oracle遠(yuǎn)程復(fù)制和異地容災(zāi)的3種解決方案介紹