PLSQL集合類型

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 --返回集合容許元素的最大數量

相關文章
相關標籤/搜索