Oracle中集合有三种,索引表(也有称PL/SQL表、index by表、联合数组),嵌套表,可变数组,下面分别就三种集合类型的定义,属性,方法及一些应用做一个简单的比较说明
一:定义(都)
1) 索引表:
第一步:定义PLSQL 表类型
TYPE typename IS TABLE OF elementType INDEX BY BINARY_INTEGER|varchar2(10)
第二步:声明该类型的一个PL/SQL表
Tablename typename;
其中 typename 是PLSQL表类型名, elementType是PLSQL表的元素类型
2) 嵌套表
第一步:定义PLSQL表类型
TYPE typename IS TABLE OF elementType
第二步:声明该类型的一个嵌套表
Tablename typename:=typename(元素1,元素2);
其中 typename 是类型名,elementType是嵌套表的元素类型
3) 可变数组
第一步:定义可变数组类型
TYPE typename IS VARRAY| VARYING ARRAY(max_size) OF elementType[not null]
第二步:声明该类型的一个可变数组
varryname typename:=typename(元素1,元素2);
需要说明的是:嵌套表和可变数组都需要初始化,初始化方法类似Java中的调用构造方法new一个对象一样。只是其括号中的不是参数,而是该嵌套表/可变数组实例的几个初值,初值可以有几个元素值,也可以为null
二.具有的属性与方法:
1)属性:三者都具有COUNT,FIRST,LAST,EXISTS属性
COUNT:用 集合名.COUNT得到集合中元素的个数。
FIRST,LAST:集合名.FIRST得到第一个元素的下标值,集合名.LAST得到集合中最后一个元素的下标值
EXISTS:采用 集合名. EXISTS(x)判断集合中位置x处是否有元素存在,只要该位置有元素存在,即使元素为null,也返回TRUE.
2)方法:
DELETE:删除集合中的元素。索引表,嵌套表具有该方法,可变数组不具有。
EXTEND:嵌套表和可变数组具有该方法,索引表不具有。用于添加元素到集合的末端
EXTEND :添加一个NULL元素到集合末端
EXTEND(x):添加x个NUll元素到集合末端
EXTEND(x,y):讲x个位于y的元素添加到集合末端
对于oracle中的嵌套表,索引表,其下标有点类似于数据库表中的ID,例如一个嵌套表tnest原来有5个元素,在tnest.DELETE(2)后,余下的元素为:tnest(1), tnest3), tnest(4), tnest(5)。tnest(2)不存在了,但是余下元素下标不变。这个和Java中集合就不同。
例子:
DECLARE
type t_test is table of integer;
v_test t_test:=t_test(66);
BEGIN
--用EXTEND方法添加元素到嵌套表中
v_test.EXTEND(3);
v_test(2):=2;
v_test(3):=3;
v_test(4):=6;
v_test.EXTEND(5,4);
dbms_output.put_line('嵌套表长度: '||v_test.COUNT||'第一个元素的下标是:'||v_test.FIRST||'其值是'||v_test(v_test.FIRST));
v_test.DELETE(v_test.LAST);
dbms_output.put_line('删除一个元素后嵌套表长度: '||v_test.COUNT||'最后一个元素的下标是'||v_test.LAST||'其值是'||v_test(v_test.LAST));
END;
得到的结果是:
嵌套表长度: 9第一个元素的下标是:1其值是66
删除一个元素后嵌套表长度: 8最后一个元素的下标是8其值是6