合法的標量類型與數據庫的列所使用的Oracle數據類型相同,此外它還有一些擴展它又分為七個組:數字字符行日期行標識布爾和可信
數字,它有三種基本類型--NUMBERPLS_INTEGER和BINARY_INTENERNUMBER可以描述整數或實數,而PLS_INTEGER和BINARY_INTENER只能描述整數
NUMBER,是以十進制格式進行存儲的,它便於存儲,但是在計算上,系統會自動的將它轉換成為二進制進行運算的它的定義方式是NUMBER(P,S),P是精度,最大38位,S是刻度范圍,可在-84...127間取值例如:NUMBER(5,2)可以用來存儲表示-999.99...999.99間的數值PS可以在定義是省略,例如:NUMBER(5)NUMBER等;
BINARY_INTENER用來描述不存儲在數據庫中,但是需要用來計算的帶符號的整數值它以2的補碼二進制形式表述循環計數器經常使用這種Oracle數據類型
PLS_INTEGER和BINARY_INTENER唯一區別是在計算當中發生溢出時,BINARY_INTENER型的變量會被自動指派給一個NUMBER型而不會出錯,PLS_INTEGER型的變量將會發生錯誤
字符,包括CHARVARCHAR2(VARCHAR)LONGNCHAR和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字節的可變字符串
NCHARNVARCHAR2,國家字符集,與環境變量NLS指定的語言集密切相關,使用方法和CHARVARCHAR2相同
行,包括RAW和LONG RAW兩種類型用來存儲二進制數據,不會在字符集間轉換
RAW,類似於CHAR,聲明方式RAW(L),L為長度,以字節為單位,作為數據庫列最大2000,作為變量最大32767字節
LONG RAW,類似於LONG,作為數據庫列最大存儲2G字節的數據,作為變量最大32760字節
日期,只有一種類型--DATE,用來存儲時間信息,站用7個字節(從世紀到秒),絕對沒有千年蟲問題
行標識,只有一種Oracle數據類型--ROWID,用來存儲行標識符,可以利用ROWIDTOCHAR函數來將行標識轉換成為字符
布爾,只有一種類型--BOOLEAN,僅僅可以表示TRUEFALSE或者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
表,不是物理存儲數據的表,在這裡是一種變量Oracle數據類型,也稱為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)等類型,這些將專門講解
在PL/SQL8.0之前,只有一種類型--REF CURSOR,也就是游標它的定義較為簡單,
- CURSOR cursor_name IS select .....from.....;
在PL/SQL8.0之後,引入了REF類型,它指向一個對象這種類型將單獨講解(等我弄明白再說,免得在高人面前......)
LOB變量主要是用來存儲大量數據的數據庫字段,最大可以存儲4G字節的內容(這麼大,存VCD?,浪費!)主要有:
CLOB:和Oracle7中的LONGOracle數據類型相似,存儲單字節字符數據(別用來存中文喔)
NCLOB:用來存儲定寬多字節字符數據(例如:存嘯傲江湖就挺好)
BLOB:和LONG RAW相似,用來存儲無結構的二進制數據
BFILE:它用來允許Oracle對數據庫外存儲的大型二進制文本進行只讀形式的訪問