oracle的數據類型

2010-04-26 14:04

Oracle 包含:

標量 (SCALAR)、複合(COMPOSITE)、引用(REFERENCE)和LOB四種數據類型

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

數字: 它有三種基本類型,NUMBER、PLS-INTEGER和 BINARY-INTEGER。

             NUMBER是以十進制格式進行儲存的,它便於儲存,但是電腦會自動將它轉換爲二進制運算。NUMBER的定義方式是NUMBER(P,S),p是精度 (precision),s是刻度範圍(scale)。精度最大值爲38,scale的取值範圍爲-84到127 。p、s可以省略,例如NUMBER(5)、NUMBER。

定點數的精度(p)和刻度 (s)遵循以下規則:

    當s>0時(s表示小數點右邊的數字的個數):

     當一個數的整數部分的長度 > p-s 時,Oracle就會報錯

     當一個數的小數部分的長度 > s 時,Oracle就會舍入。

    當s<0時(s表示小數點左邊的數字的個數):

     Oracle就對小數點左邊的s個數字進行舍入。

     當s > p 時, p表示小數點後第s位向左最多可以有多少位數字,如果大於p則Oracle報錯,小數點後s位向 右       的數字被舍入

         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相同。 (varchar2是oracle提供的獨特的數據類型,oracle保證在任何版本中該數據類型向上和向下兼容,但不保證varchar。因爲 varchar是標準sql提供的數據類型,有可能隨着sql標準的變化而改變,推薦用varchar2。)(CHAR如果存放字母數字佔1個字節,存放 GBK編碼的漢字存放2個字節,存放UTF-8編碼的漢字佔用3個字節;NCHAR根據所選字符集來定義存放字符的佔用字節數,一般都爲2個字節存放一個 字符(不管字符或者漢字)。同理VARCHAR2與NVARCHAR2的區別。)
行:包括RAW和LONG RAW兩種類型。用來存儲二進制數據,不會在字符集間轉換。

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

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

    (raw這種格式可以用來保存較小的圖形文件或帶格式的文本文件,如Miceosoft Word文檔。raw是一種較老的數據類型,將來會逐漸被BLOB、CLOB、NCLOB等大的對象數據類型所取代。long raw 無可變長二進制數據,最大長度是2GB。Oracle用這種格式來保存較大的圖形文件或帶格式的文本文件,如Miceosoft Word文檔,以及音頻、視頻等非文本文件。在同一張表中不能同時有long類型和long raw類型,long raw也是一種較老的數據類型,將來會逐漸被BLOB、CLOB、NCLOB等大的對象數據類型所取代)

其它:

       日期,只有一種類型--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。

三、引用(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對數據庫外存儲的大型二進制文本進行只讀形式的訪問


Oracle 9i共提供了16種標量數據類型表:

名稱 含義
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 用來存儲浮點數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章