Oracle資料型別

2021-09-05 14:37:57 字數 4918 閱讀 9879

在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位元組的內容(這麼大,存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

無從西元前2023年1月1日到公元2023年12月31日的所有合法日期,oracle 8i其實在內部是按7個位元組來儲存日期資料,在定義中還包括小時、分、秒。預設格式為dd-mon-yy,如07-11-00 表示2023年11月7日。

raw(n)

n=1 to 2000

可變長二進位制資料,在具體定義欄位的時候必須指明最大長度n,oracle 8i用這種格式來儲存較小的圖形檔案或帶格式的文字檔案,如miceosoft word文件。raw是一種較老的資料型別,將來會逐漸被blob、clob、nclob等大的物件資料型別所取代。

long raw

無blob

clob

nclob

無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

用來儲存浮點數

參考書目:

1. oracle8 pl/sql程式設計, 機械工業出版社

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...