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 可變陣列...