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