Oracle三種集合資料型別的比較

2021-05-27 18:32:08 字數 2494 閱讀 5296

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不合法

Python三種主流組合資料型別

集合型別及操作 序列型別及操作 字典型別及操作 本文根據mooc北京理工大學的python課程記錄並總結 什麼是集合?集合是多個元素的無序組合,建立集合型別用 或者set 如果我們需要建立乙個空集合的時候,必須使用set 函式 也就是是說元素一旦放到集合中,這個元素是不能被修改的,比如像列表型別。列...

集合資料型別

集合用大括號 表示,元素間用逗號分隔 建立集合型別用 或者set 建立空集合型別,必須用set 集合中每個元素必須唯一,不存在相同元素 集合中的元素之間無序 a b a和b中的所有的元素 a b 包含a但是不包含b的元素 a b 同時屬於a和b的元素 a b 包含ab中不相同的元素 a b或a b或...

ORACLE集合資料型別知識整理 sql

定義陣列的大小200,以及所能儲存的最大位元組數2000 create or replace type va planguage is varray 200 of varchar2 2000 declare lang va planguage begin lang va planguage 可變陣列...