ORACLE數據類型

Oracle數據類型

在ORACLE8中定義了:標量(Scalar)、複合(COMPOSITE)、引用(REFERENCE)和LOB四種數據類型。

(一)標量(Scalar)

標量類型與數據庫的列所使用的類型相同,此外它還有一些擴展。

它又分爲七個組:數字、字符、行、日期、行標識、布爾和可信。

①數字 有三種基本類型:NUMBER、PLS_INTEGER和BINARY_INTENER。

NUMBER可以描述整數或實數,而PLS_INTEGER和BINARY_INTENER只能描述整數。

NUMBER,是以十進制格式進行存儲的,它便於存儲,但是在計算上,系統會自動的將它轉換成爲二進制進行運算的。它的定義方式是NUMBER(P,S),P是精度,最大38位,S是刻度範圍,可在-84...127 間取值。例如:NUMBER(5,2)可以用來存儲表示-999.99...999.99 間的數值。

P、S可以在定義是省略,例如:NUMBER(5)、NUMBER等;

 

BINARY_INTENER用來描述不存儲在數據庫中,但是需要用來計算的帶符號的整數值。它以2的補碼二進制形式表述。循環計數器經常使用這種類型。

 

PLS_INTEGER和BINARY_INTENER唯一區別是在計算當中發生溢出時,BINARY_INTENER型的變量會被自動指派給一個NUMBER型而不會出錯,PLS_INTEGER型的變量將會發生錯誤。

 

②字符 包括CHAR、VARCHAR2(VARCHAR)、LONG、NCHAR和NVARCHAR2幾種類型。

CHAR 描述定長的字符串,如果實際值不夠定義的長度,系統將以空格填充。它的聲明方式如下

CHAR(L) L爲字符串長度,缺省爲1,作爲變量最大32767個字符,作爲數據存儲在ORACLE8中最大爲2000。

 

VARCHAR2(VARCHAR) 描述變長字符串。它的聲明方式如下VARCHAR2(L),L爲字符串長度,沒有缺省值,作爲變量最大32767個字節,作爲數據存儲在ORACLE8中最大爲4000。在多字節語言環境中,實際存儲的字符個數可能小於L值,例如:當語言環境爲中文(SIMPLIFIED CHINESE_CHINA.ZHS16GBK)時,一個VARCHAR2(200)的數據列可以保存200個英文字符或者100個漢字字符。

 

LONG 在數據庫存儲中可以用來保存高達2G的數據,作爲變量,可以表示一個最大長度爲32760字節的可變字符串。

 

NCHAR、NVARCHAR2 國家字符集,與環境變量NLS指定的語言集密切相關,使用方法和CHAR、VARCHAR2相同。

 

③行

包括RAW和LONG RAW兩種類型。用來存儲二進制數據,不會在字符集間轉換。

RAW 類似於CHAR,聲明方式RAW(L),L爲長度,以字節爲單位,作爲數據庫列最大2000,作爲變量最大32767字節。

 

LONG RAW 類似於LONG,作爲數據庫列最大存儲2G字節的數據,作爲變量最大32760字節。

 

④日期

只有一種類型--DATE,用來存儲時間信息,站用7個字節(從世紀到秒),絕對沒有“千年蟲”問題。

⑤行標識

只有一種類型--ROWID,用來存儲“行標識符”,可以利用ROWIDTOCHAR函數來將行標識轉換成爲字符。

⑥布爾

只有一種類型--BOOLEAN,僅僅可以表示TRUE、FALSE或者NULL。

⑦可信

只有一種類型--MLSLABEL,可以在TRUSTED ORACLE中用來保存可變長度的二進制標籤。

在標準ORACLE中,只能存儲NULL值。

 

(二)複合(COMPOSITE)

標量類型是經過預定義的,利用這些類型可以衍生出一些複合類型。主要有記錄、表。

①記錄,可以看作是一組標量的組合結構,它的聲明方式如下:

TYPE record_type_name IS RECORD

( filed1 type1 [NOT NULL] [:=expr1]

.......

filedn typen [NOT NULL] [:=exprn] )

其中,record_type_name是記錄類型的名字。(是不是看着象CREATE TABLE?......)引用時必須定義相關的變量, 記錄只是TYPE,不是VARIABLE。

②表,不是物理存儲數據的表,在這裏是一種變量類型,也稱爲PL/SQL表,它類似於C語言中的數組,在處理方式上也相似。

它的聲明方式如下:

TYPE table_type_name IS TABLE OF scalar_type INDEX BY BINARY_INTENER;

其中,table_type_name是類型的名字,scalar_type是一種標量類型的類型聲明。引用時也必須定義相關的變量。

表和數組不同,表有兩列,KEY和VALUE,KEY就是定義時聲明的BINARY_INTENER,VALUE就是定義時聲明的scalar_type。

除了記錄和表之外,還有對象類型、集合(嵌套表和VARRAYS)等類型,這些將專門講解。

(三)引用(REFERENCE)

在PL/SQL8.0 之前,只有一種類型--REF CURSOR,也就是遊標。它的定義較爲簡單,

CURSOR cursor_name IS select .....from.....;

在PL/SQL8.0 之後,引入了REF類型,它指向一個對象。

(四)LOB型

LOB變量主要是用來存儲大量數據的數據庫字段,最大可以存儲4G字節的內容。主要有:

①CLOB 和ORACLE7中的LONG類型相似,存儲單字節字符數據。(別用來存中文喔。。。)

②NCLOB 用來存儲定寬多字節字符數據。(例如:存《嘯傲江湖》就挺好)

③BLOB 和LONG RAW相似,用來存儲無結構的二進制數據。

④BFILE 用來允許ORACLE對數據庫外存儲的大型二進制文本進行只讀形式的訪問。

 

8i 的數據類型

數據類型

參數

描述

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。

char(n)

n=1 to 2000字節

定長字符串,n字節長,如果不指定長度,缺省爲1個字節長(一個漢字爲2字節)

long

可變長字符列,最大長度限制是2GB,用於不需要作字符串搜索的長串數據,如果要進行字符搜索就要用varchar2類型。long是一種較老的數據類型,將來會逐漸被BLOB、CLOB、NCLOB等大的對象數據類型所取代。

varchar2(n)

n=1 to 4000字節

可變長的字符串,具體定義時指明最大長度n,這種數據類型可以放數字、字母以及ASCII碼字符集(或者EBCDIC等數據庫系統接受的字符集標準)中的所有符號。如果數據長度沒有達到最大值n,Oracle 8i會根據數據大小自動調節字段長度,如果你的數據前後有空格,Oracle 8i會自動將其刪去。VARCHAR2是最常用的數據類型。可做索引的最大長度3209。

date

從公元前4712年1月1日到公元4712年12月31日的所有合法日期,Oracle 8i其實在內部是按7個字節來保存日期數據,在定義中還包括小時、分、秒。缺省格式爲DD-MON-YY,如07-11-00 表示2000年11月7日。

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,但是不能寫入。大小由操作系統決定。

 

9i 的數據類型

名稱

含義

Char

用於描述定長的字符型數據,長度< = 2000 字節

varchar2

用於描述變長的字符型數據,長度< = 4000 字節

nchar

用來存儲Unicode字符集的定長字符型數據,長度< = 1000 字節

nvarchar2

用來存儲Unicode字符集的變長字符型數據,長度< = 1000 字節

number

用來存儲整型或者浮點型數值

Date

用來存儲日期數據

Long

用來存儲最大長度爲2GB的變長字符數據

Raw

用來存儲非結構化數據的變長字符數據,長度< = 2000 字節

Long raw

用來存儲非結構化數據的變長字符數據,長度< = 2GB

rowid

用來存儲表中列的物理地址的二進制數據,佔用固定的10個字節

Blob

用來存儲多達4GB的非結構化的二進制數據

Clob

用來存儲多達4GB的字符數據

nclob

用來存儲多達4GB的Unicode字符數據

Bfile

用來把非結構化的二進制數據存儲在數據庫以外的操作系統文件中

urowid

用來存儲表示任何類型列地址的二進制數據

float

用來存儲浮點數

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章