集合常用方法
方法:exists,count,limit,first,last,prior,next
过程:extend,trim,delete
extend,trim只适用于嵌套表和数组,对索引表不适用
delete 只适用于索引表和嵌套表,对数组不适用
1.exists 确定集合元素下标是否存在,存在返回true,不存在返回false
用法: 集合名.exists(下标) --注意,判断的是下标,嵌套表和数组需要初始化
declare
type ename_table_type is table of emp.ename%type index by binary_integer;
ename_table ename_table_type; --初始化一个元素
begin
ename_table('2'):='ze';
if ename_table.exists('2') then --ename_table.exists('3')返回false
dbms_output.put_line(ename_table('2'));
else
dbms_output.put_line('必须初始化集合元素');
end if;
end;
2.count 返回当前集合变量中元素总个数,统计结果包含null元素
declare
type ename_table_type is varray(10) of emp.ename%type;
ename_table ename_table_type:=ename_table_type('1','2');
begin
dbms_output.put_line(ename_table.count); --2
ename_table.extend(3);
ename_table(3):=null;
dbms_output.put_line(ename_table.count); --5
dbms_output.put_line(nvl(ename_table(3),'1')); --1
end;
3.limit 对于varray数组,返回集合变量最大个数,而对嵌套表和索引表是没有个数限制的,返回null
declare
type ename_table_type is varray(10) of emp.ename%type;
ename_table ename_table_type:=ename_table_type('1','2');
begin
dbms_output.put_line(ename_table.limit); --10
end;
4.first 返回集合元素下标排序后的第一个下标
last 返回集合元素下标排序后的最后一个下标
declare
type ename_table_type is varray(10) of emp.ename%type;
ename_table ename_table_type:=ename_table_type('2','1');
begin
ename_table.extend(3);
dbms_output.put_line(ename_table.first); --1
dbms_output.put_line(ename_table.last); --5
end;
--对于索引表,第一个元素下标是指标按元素下标排序后的第一个元素下标
declare
type ename_table_type is table of emp.ename%type index by varchar2(10); --varchar2需要定义长度
ename_table ename_table_type;
begin
ename_table('b'):='c';
ename_table('a'):='a';
dbms_output.put_line(ename_table.first); --a
dbms_output.put_line(ename_table.last); --b
end;
5.prior 返回当前集合元素的前一个元素下标(没有时返回null)
next 返回当前集合元素的后一个元素下标(没有时返回null)
declare
type ename_table_type is table of emp.ename%type index by varchar2(10); --varchar2需要定义长度
ename_table ename_table_type;
begin
ename_table('b'):='b';
ename_table('a'):='a';
ename_table('c'):='c';
ename_table('d'):='d';
dbms_output.put_line(ename_table.prior('c')); --b
dbms_output.put_line(ename_table.next('d')); --null
end;
6.extend 增加元素,只对嵌套表和数组,增加数组元素的时候,不能超过数组最大个数
extend --增加1个元素,元素值为null
extend(n) --增加n个元素,元素值为null
extend(n,i) --增加n个元素,元素值跟第i个元素值相同
declare
type ename_table_type is varray(10) of emp.ename%type;
ename_table ename_table_type:=ename_table_type('2','1');
begin
ename_table.extend(3,1);
dbms_output.put_line(ename_table(4)); --1
end;
7.trim 从集合尾部删除元素,只对嵌套表和数组
trim 从集合尾部删除一个元素
trim(n) 从集合尾部删除n个元素
declare
type ename_table_type is varray(10) of emp.ename%type;
ename_table ename_table_type:=ename_table_type('2','1');
begin
ename_table.trim;
dbms_output.put_line(ename_table(2)); --报错下标超出数量
end;
8.delete 删除集合元素,只适用于索引表和嵌套表
delete 删除全部元素
delete(n) 删除第n个元素
delete(m,n) 删除从m到n之间的所有元素
declare
type ename_table_type is table of emp.ename%type index by varchar2(10); --varchar2需要定义长度
ename_table ename_table_type;
begin
ename_table('b'):='b';
ename_table('a'):='a';
ename_table('c'):='c';
ename_table('d'):='d';
ename_table.delete('f','c');
dbms_output.put_line(ename_table.count); --4
ename_table.delete('a','c');
dbms_output.put_line(ename_table.count); --1
end;