PLSQL集合類型sql
--聯合數組(索引表)數據庫
/*數組
用於存儲某個數據類型的數據集合類型 。經過索引得到聯合數組中得值函數
以下例子:spa
*/索引
DECLARE table
CURSOR cur_chars IS SELECT chars FROM a;--聲明遊標ast
TYPE str_type IS TABLE OF a.chars%TYPE--聲明聯合數組擴展
INDEX BY BINARY_INTEGER; --聲明聯合數組的索引遍歷
strs str_type;--聲明str_type 的聯合數組strs
counts INTEGER := 0;
BEGIN
FOR cur_chars_rec IN cur_chars LOOP
counts := counts + 1;
strs(counts) := cur_chars_rec.chars;
dbms_output.put_line('counts('||counts||'):'||strs(counts));
END LOOP;
END;
這個聯合索引類型其實就是表數據的索引,定義遊標而後把遍歷到的結果存放在聯合數組中,就至關於程序的基本數據類型數組
1.聲明遊標用來遍歷表數據2.聲明聯合數組用來存儲遊標遍歷的數據集3.聲明索引
4.定義聯合數組 聯合數組名稱 聯合數組type
strs(counts) := cur_chars_rec.chars; 聯合數組賦值命令
--嵌套表
/*
plsql表類型之一,他與聯合數組具備相同的結構,都是使用下標訪問數組
主要區別在於,嵌套表能夠存儲在數據庫表的列中,而聯合數組不行
*/
DECLARE
CURSOR my_cursor IS SELECT chars FROM a WHERE NUM='ww' ;--定義遊標
TYPE table_type IS TABLE OF a.chars%TYPE;--聲明表類型
table_name table_type:=table_type();--定義並初始化嵌套表
counts INTEGER := 1;
BEGIN
FOR my_cursor_rec IN my_cursor LOOP
counts := counts;
table_name.extend;--表作成可擴展的***
table_name(counts):=my_cursor_rec.chars;
dbms_output.put_line('counts'||counts||' := '||table_name(counts));
END LOOP;
END;
--建立變長數組
DECLARE
TYPE varray_type IS ARRAY(10) OF NUMBER(6);
varray_name varray_type := varray_type(); --變長數組同嵌套表相同都須要初始化收集
counts INTEGER := 0;
BEGIN
FOR i IN 1..5 LOOP
counts := counts + 1;
varray_name.extend;
varray_name(counts) := i;--這個都是相同的使用下標
dbms_output.put_line('counts('||counts||'):='||i);
END LOOP;
END;
varray_name.extend; 的使用超過範圍的時候須要使用擴展
集合函數的使用count 數量 first 第一個 last 最後一個
Varrary_array.count Varrary_array.first Varrary_array.last
Varrary_array.trim(4) 從後往前刪除4個數組元素
多層集合 集合做爲集合的元素
變長數組爲例 就至關於數據的嵌套
--多層集合(數組的嵌套)
DECLARE
TYPE var_type1 IS VARRAY(5) OF INTEGER;--聲明變長數組
TYPE var_type2 IS VARRAY(3) OF var_type1;--聲明多層集合,集合元素類型爲var_type1
varray_integer var_type1 := var_type1(1,2,3,4,5);--集合給初始值
varray_multi var_type2 := var_type2(varray_integer);
BEGIN
FOR i IN 1..5 LOOP
dbms_output.put_line('varray_integer('||i||'):='||varray_integer(i));
END LOOP;
varray_multi.extend;
varray_multi(2) := var_type1(6,7,8,9,10);
varray_multi.extend;
varray_multi(3) := var_type1(5,4,3,2,1);
FOR i IN 1..3 LOOP
FOR j IN 1..5 LOOP
dbms_output.put_line('varray_multi['||i||']'||'['||j||']=='||varray_multi(i)(j));
END LOOP;
END LOOP;
END;
--集合的方法
DELETE --刪除集合元素
EXTEND --爲集合增長元素空間,實現空間的擴展以填充新元素。
COUNT --集合元素中的數量
EXISTS --若是指定的元素在集合中存在,則返回true
DELETE --刪除指定集合位置的元素
FIRST AND LAST --集合中的第一個和最後一個元素
PRIOR AND NEXT --返回集合指定位置的前一個和後一個元素
TRIM --從集合尾部刪除元素
LIMIT --返回集合容許元素的最大數量