介绍extend,count,limit,first,last,exists方法的使用
declare
type t_array is varray(10) of number; --可变长数组类型,最大长度为10
type t_nesttab is table of number;--嵌套表,最大长度没有限制
type t_indextab is table of number index by binary_integer;--索引表,最大长度没有限制
v_array t_array := t_array();--声明可变长数组变量,并用构造函数初始化
v_nesttab t_nesttab := t_nesttab();--声明嵌套表类型的变量,并用构造函数初始化
v_indextab t_indextab;--声明索引表类型的变量,使用前,没有必要进行初始化
begin
dbms_output.put_line('----------extend方法使用----------');
--extend方法使用
v_array.extend; --往数组最后添加一个NULL元素,使用方法1
v_array(1) := 1;--添加一个元素后,对这个元素进行赋值,索引从1开始
dbms_output.put_line(v_array(1));
v_array.extend(2);--往数组最后添加2个NULL元素,使用方法2
v_array(2) := 2;
v_array(3) := 3;
dbms_output.put_line(v_array(2));
dbms_output.put_line(v_array(3));
v_array.extend(2,1);--添加第一个元素的2份副本
dbms_output.put_line(v_array(4));
dbms_output.put_line(v_array(5));
v_nesttab.extend;--往数组最后添加一个NULL元素
v_nesttab(1) := 1;--添加一个元素后,对这个元素进行赋值,索引从1开始
dbms_output.put_line(v_nesttab(1));
v_nesttab.extend(2);--往数组最后添加2个NULL元素
v_nesttab(2) := 2;
v_nesttab(3) := 3;
dbms_output.put_line(v_nesttab(2));
dbms_output.put_line(v_nesttab(3));
v_nesttab.extend(2,1);--添加第一个元素的2份副本
dbms_output.put_line(v_nesttab(4));
dbms_output.put_line(v_nesttab(5));
--v_indextab.extend;--索引表没有extend这个函数,直接给对应下标赋值就行
--应为它是以键值对存储数据的。
for i in 1..5 loop
v_indextab(i) := i;
dbms_output.put_line(v_indextab(i));
end loop;
dbms_output.put_line('----------count方法使用----------');
--count方法使用 集合里已经存储的元素个数
dbms_output.put_line('v_array:' || v_array.count);
dbms_output.put_line('v_nesttab:' || v_nesttab.count);
dbms_output.put_line('v_indextab:' || v_indextab.count);
dbms_output.put_line('----------LIMIT方法使用----------');
--count方法使用 集合里已经存储的元素个数
dbms_output.put_line('v_array:' || v_array.LIMIT);--返回10
dbms_output.put_line('v_nesttab:' || v_nesttab.LIMIT);--上限没有限制,故返回NULL
dbms_output.put_line('v_indextab:' || v_indextab.LIMIT);--上限没有限制,故返回NULL
dbms_output.put_line('----------FIRST,LAST方法使用----------');
--FIRST,LAST 返回第一个元素和最后一个元素的索引
dbms_output.put_line('v_array.FIRST:' || v_array.FIRST);
dbms_output.put_line('v_array.LAST:' || v_array.LAST);
dbms_output.put_line('v_nesttab.FIRST:' || v_nesttab.FIRST);
dbms_output.put_line('v_nesttab.LAST:' || v_nesttab.LAST);
dbms_output.put_line('v_indextab.FIRST:' || v_indextab.FIRST);
dbms_output.put_line('v_indextab.LAST:' || v_indextab.LAST);
dbms_output.put_line('----------exists方法使用----------');
--exists方法使用 判断对应下标值是否存在
if v_array.exists(1) then
dbms_output.put_line('index 1 is exists');
end if;
if not v_array.exists(6) then --小标6还没添加元素
dbms_output.put_line('index 6 is not exists');
end if;
v_array.extend;
if v_array.exists(6) then --就算是NULL,也返回true
dbms_output.put_line('index 6 is exists');
end if;
if v_nesttab.exists(1) then
dbms_output.put_line('index 1 is exists');
end if;
if not v_nesttab.exists(6) then --小标6还没添加元素
dbms_output.put_line('index 6 is not exists');
end if;
v_nesttab.extend;
if v_nesttab.exists(6) then --就算是NULL,也返回true
dbms_output.put_line('index 6 is exists');
end if;
if v_indextab.exists(1) then
dbms_output.put_line('index 1 is exists');
end if;
if not v_indextab.exists(6) then --小标6还没添加元素
dbms_output.put_line('index 6 is not exists');
end if;
v_indextab(6) := 6;
if v_indextab.exists(6) then --添加元素后,也返回true
dbms_output.put_line('index 6 is exists');
end if;
end;
/