集合类型
1.VARRAY是一种具有可伸缩性的数组,数组中的每个元素具有相同的数据类型。
语法:
TYPE<数组名> IS VARRAY(<常量表达式>) OF <数据类型>;
例子:DECLARE
TYPE MY_ARRAY_TYPE IS VARRAY(10) of varchar(100);
v my_array_type;
begin
v:=my_array_type();
print 'v.count()='||v.count();
for i in 1..8 loop
v.extend();
select name into v(I) from person where id=i;
END LOOP;
PRINT 'v.COUNT()=' || v.COUNT();
FOR I IN 1..v.COUNT() LOOP
PRINT 'v(' || i || ')=' ||v(i);
END LOOP;
END;
结果:
v.count()=0
v.COUNT()=8
v(1)=aa
v(2)=bb
v(3)=cc
v(4)=dd
v(5)=ee
v(6)=ff
v(7)=gg
v(8)=hh
影响了1条记录
1条语句执行成功
2.索引表提供了一种快速、方便地管理一组相关数据的方法。索引表不需要用户指定大小,其大小根据用户的操作自动增长。
语法:
TYPE <索引表名> IS TABLE OF<数据类型> INDEX BY <索引数据类型>;
例子:
DECLARE
TYPE Arr IS TABLE OF VARCHAR(100) INDEX BY INT;
x Arr;
BEGIN
x(1) := 'TEST1';
x(2) := 'TEST2';
x(3) := x(1) || x(2);
PRINT x(3);
END;
结果:
TEST1TEST2
3.嵌套表:嵌套表类似于一维数组,但与数组不同的是,嵌套表不需要指定元素的个数,其大小可自动扩展。嵌套表元素的下标从1开始。
语法:
TYPE <嵌套表名> IS TABLE OF <元素数据类型>;
例子:
DECLARE
TYPE info_t IS table of SYSDBA.PERSON.NAME %TYPE;
i number:=0;
cursor c_name is select name from PERSON;
info info_t:=info_t();
begin
for aname in c_name loop
i:=i+1;
info.extend;
info(i):=aname.name;
print (aname.name);
end loop;
for j in 1..info.count() loop
print(info(j));
end loop;
end;
结果:
aa
bb
cc
dd
ee
ff
gg
hh
aa
bb
cc
dd
ee
ff
gg
hh