Oracle資料型別

lishiran發表於2007-04-01
在ORACLE8中定義了:標量(Scalar)、複合(COMPOSITE)、引用(REFERENCE)和LOB四種資料型別,[@more@]標量(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位元組的內容(這麼大,存VCD?,浪費!)。主要有:
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用來儲存浮點數

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9099175/viewspace-907799/,如需轉載,請註明出處,否則將追究法律責任。

相關文章