資料庫-Oracle【Oracle 三種集合資料類型的比較 】

來源:互聯網
上載者:User

PL/SQL中沒有數組的概念,他的集合資料類型和數組是相似的。在7.3以前的版本中只有一種集合,稱為PL/SQL表,在這之後又有兩種集合資料類型:巢狀表格和varray。其中varray集合中的元素是有數量限制的,index_by表和巢狀表格是沒有這個限制的。index-by表是稀疏的,也就是說下標可以不連續,varray類型的集合則是緊密的,他的下標沒有間隔。index_by表不能儲存在資料庫中,但是巢狀表格和varray可以被儲存在資料庫中。

集合在使用時必須先使用type進行定義方可使用

1.index_by表

type type_name is table of element_type [NOT NULL] index by binary_integer

2.巢狀表格

type type_name is table of element_type [NOT NULL]

3.varray

type type_name is [varray |varying array](max_size) of element_type[NOT NULL]

一,index_by表

TYPE TYPE1 IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;

1.使用的時候需要先賦值後讀取,至少也要先初期化一下,否則會出現異常:ORA-01403: no data found。

2.這種數組不需要事先指定上限,下標可以不連續,可以是0或負數。

例:v1 TYPE1;

v1(-1) := '-1';
v1(0) := '0';
v1(1) := '1';
DBMS_OUTPUT.put_line(v1(-1)); --訪問合法

DBMS_OUTPUT.put_line(v1(2)); --訪問非法

二,巢狀表格

TYPE TYPE2 IS TABLE OF VARCHAR2(10);

1.必須進行初期化,否則會出現異常:ORA-06531: Reference to uninitialized collection

2.初期化方法:

v1 TYPE2 := TYPE2(); --聲明時初期化數組為空白

v2 TYPE2 := TYPE2('1','2','3','4','5'); --聲明時初期化數組為5個元素

v1 := TYPE2(); --初期化後數組為空白

v2 := TYPE2('1','2','3','4','5'); --初期化後數組為5個元素

3.數組元素的訪問:

下標從1開始,不能超過數組所有元素的總和,當下標超出允許範圍時,出現異常:ORA-06532: Subscript outside of limit

因為不能訪問空數組,所以空數組的場合,必須進行數組擴充。

例:v1.EXTEND;

V1(1):= ‘1’; --訪問合法

v1(2):= ‘2’; --訪問非法,之前必須再次執行v1.EXTEND;

例:v2的下標範圍是1~5。

v2(5):= ‘Hello’; --訪問合法

DBMS_OUTPUT.put_line(v2(6)); --訪問非法

三,Varray

TYPE TYPE3 IS ARRAY(5) OF VARCHAR2(10);

由於類型定義時的元素個數限制,所以TYPE3的變數在使用時最大的元素個數不能超過5個。

與巢狀表格基本相同(略)

四,集合內建函數

集合還有很多內建函數,這些函數稱為方法,調用方法的文法如下:

collection.method

下表中列出oracle中集合的方法

方法 描述 使用限制

COUNT 返回集合中元素的個數

DELETE 刪除集合中所有元素

DELETE(x) 刪除元素下標為x的元素,如果x為null,則集合保持不變 對VARRAY非法

DELETE(x,y) 刪除元素下標從X到Y的元素,如果X>Y集合保持不變 對VARRAY非法

EXIST(x) 如果集合元素x已經初始化,則返回TRUE, 否則返回FALSE

EXTEND 在集合末尾添加一個元素 對Index_by非法

EXTEND(x) 在集合末尾添加x個元素 對Index_by非法

EXTEND(x,n) 在集合末尾添加元素n的x個副本 對Index_by非法

FIRST 返回集合中的第一個元素的下標號,對於VARRAY集合始終返回1。

LAST 返回集合中最後一個元素的下標號, 對於VARRAY傳回值始終等於COUNT。

LIMIT 返回VARRY集合的最大的元素個數,對於巢狀表格和Index_by集合無用。

NEXT(x) 返回在元素x之後及緊挨著它的元素的值,如果該元素是最後一個元素,則返回null。

PRIOR(x) 返回集合中在元素x之前緊挨著它的元素的值,如果該元素是第一個元素,則返回null。

TRIM 從集合末端開始刪除一個元素 對index_by不合法

TRIM(x) 從集合末端開始刪除x個元素 對index_by不合法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.