ORACLE 資料型別總結

2021-07-13 16:42:54 字數 4960 閱讀 2746

oracle 包含:標量 (scalar)、復合(composite)、引用(reference)和lob四種資料型別;

標量資料型別分為七個組:數字、字元、行、日期、行標識、布林和可信。

數字型別:number、pls-integer和 binary-integer。

number是以十進位制格式進行儲存的,它便於儲存,但是電腦會自動將它轉換為二進位制運算。number的定義方式是number(p,s),p是精度 (precision),s是刻度範圍(scale)。精度最大值為38,scale的取值範圍為-84到127 。p、s可以省略,s的預設值是0,例如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位元組的可變字串。它是從早期版本中繼承來的。現在如果想儲存大容量的資料,oracle推薦使用clob和nclob資料型別。在表和sql語句中使用long型別有許多限制。clob和nclob clob和nclob資料型別可以儲存多達4gb的字元資料。nclob資料型別可儲存nls資料。

nchar、nvarchar2:國家字符集,與環境變數nls指定的語言集密切相關,nchar和nvarchar2資料型別分別儲存固定長度與可變長度的字元資料,但是它們使用的是和資料庫其他型別不同的字符集。在建立資料庫時,需要指定所使用的字符集,以便對資料庫中資料進行編碼。還可以指定乙個輔助的字符集[即本地語言集(national language set,簡稱nls)]。nchar和nvarchar2型別的列使用輔助字符集,使用方法和char、varchar2相同。varchar2是oracle提供的獨特的資料型別,oracle保證在任何版本中該資料型別向上和向下相容,但不保證varchar。因為 varchar是標準sql提供的資料型別,有可能隨著sql標準的變化而改變,推薦用varchar2。char如果存放字母數字佔1個位元組,存放 gbk編碼的漢字存放2個位元組,存放utf-8編碼的漢字占用3個位元組;nchar根據所選字符集來定義存放字元的占用位元組數,一般都為2個位元組存放乙個 字元(不管字元或者漢字)。同理varchar2與nvarchar2的區別。在oracle9i中,可以以字元而不是位元組為單位來表示nchar和nvarchar2列的長度。

行:包括raw和long raw兩種型別。用來儲存二進位制資料,不會在字符集間轉換。

raw:類似於 char,宣告方式raw(l),l為長度,以位元組為單位,作為資料庫列最大2000,作為變數最大32767位元組。主要用於對資料庫進行解釋。指定這兩種型別時,oracle以位的形式來儲存資料。raw資料型別一般用於儲存有特定格式的物件,如位圖。 raw資料型別可占用2kb的空間,而long raw資料型別則可以占用2gb大小。

日期:只有一種型別date,用來儲存時間資訊,站用7個位元組(從世紀到秒),絕對沒有「千年蟲」問題。通過修改例項的引數nls_date_format,可以改變例項中插入日期的格式。在乙個會話期間,可以通過alter session sql命令來修改日期,或者通過使用sql語句的to_date表示式中的引數來更新乙個特定值。

行標識rowid:只有一種型別rowid,用來儲存「行識別符號」,可以利用rowidtochar函式來將行標識轉換成為字元。rowid是一種特殊的列型別,稱之為偽列(pseudocolumn)。偽列在sql select語句中可以像普通列那樣被訪問。oracle資料庫中每行都有乙個偽列。rowid表示行的位址,rowid偽列用rowid資料型別定義。rowid與磁碟驅動的特定位置有關,因此,rowid是獲得行的最快方法。但是,行的rowid會隨著解除安裝和過載資料庫而發生變化,因此建議不要在事務 中使用rowid偽列的值。例如,一旦當前應用已經使用完記錄,就沒有理由儲存行的rowid.不能通過任何sql語句來設定標準的rowid偽列的值。列或變數可以定義成rowid資料型別,但是oracle不能保證該列或變數的值是乙個有效的rowid。

布林:只有一種型別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:和ora7中的long型別相似,儲存單位元組字元資料,別用來存中文,只能儲存字元資料,可以指定將乙個lob資料儲存在oracle資料庫內,還是指向乙個包含次資料的外部檔案,lob可以參與事務。管理lob中的資料必須通過dbms_lob pl/sql內建軟體包或者oci介面;

nclob:用來儲存定寬多位元組字元資料,儲存本地語言字符集資料。

blob:和long raw相似,用來儲存無結構的二進位制資料。

bfile:它用來允許oracle對資料庫外儲存的大型二進位制文字進行唯讀形式的訪問。 lob(大型物件)資料型別,可以儲存4gb的資訊。  

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用來儲存浮點數

null

null值是關聯式資料庫的重要特徵之一。實際上,null不代表任何值,它表示沒有值。如果要建立表的乙個列,而這個列必須有值,那麼應將它指定為not null,這表示該列不能包含null值。

任何資料型別都可以賦予null值。null值引入了sql運算的三態邏輯。如果比較的一方是null值,那麼會出現3種狀態:ture、false以及兩者都不是。

因為null值不等於0或其他任何值,所以測試某個資料是否為null值只能通過關係運算子is null來進行。

null值特別適合以下情況:當乙個列還未賦值時。如果選擇不使用null值,那麼必須對行的所有列都要賦值。這實際上也取消了某列不需要值的可能性,同時對它賦的值也很容易產生誤解。這種情況則可能誤導終端使用者,並且導致累計操作的錯誤結果。

oracle資料型別

char 用於描述定長的字元型資料,長度 2000位元組 varchar2 用於描述變長的字元型資料,長度 4000位元組 nchar 用來儲存unicode字符集的定長字元型資料,長度 1000位元組 nvarchar2 用來儲存unicode字符集的變長字元型資料,長度 1000位元組 numb...

Oracle資料型別

一 概述 標量 scalar 復合 composite 引用 reference lob 二 標量 scalar 合法的標量型別與資料庫的列所使用的型別相同,此外它還有一些擴充套件。它又分為七個組 數字 字元 行 日期 行標識 布林和可信。數字,它有三種基本型別 number pls integer...

Oracle 資料型別

資料型別 引數描述 char n n 1 to 2000位元組 定長字串,n位元組長,如果不指定長度,預設為1個位元組長 乙個漢字為2位元組 varchar2 n n 1 to 4000位元組 可變長的字串,具體定義時指明最大長度n,這種資料型別可以放數字 字母以及ascii碼字符集 或者ebcdi...