刚学习数组和嵌套表,对其中的delete方法有几个地方容易产生误解。具体如下:
误解一:delete方法只针对嵌套表,数组没有delete方法。
数组是由一组相同性质的元素紧密排列组成,通过下标表示各个元素,因为是紧密排序的,所以数组不能使用delete(n)的方式删除某个元素。但是,可以使用delete(不带下标)对整个数组所有元素进行删除。
如:
declare
type num_varray is varray(5) of number;
v_numvarray num_varray:=num_varray(1,2,3,4,5);
begin
dbms_output.put_line(to_char(v_numvarray.count));
v_numvarray.delete;
dbms_output.put_line(to_char(v_numvarray.count));
end;
输出:
5
0
误解二:在上例中,通过delete操作,我们发现元素及下标都删除了,所以在嵌套表中,delete(n)进行删除操作后,往往会认为该元素及下标也都删除了。实际上,对嵌套表中某个或某几个元素进行delete,仅仅是删除了元素的值,该元素的placeholder还是保留在那里的。这时候count方法不对其进行统计(官文原句:When tallying elements,COUNT ignores deleted elements )。
如:
declare
type num_table is table of number;
v_num_tab num_table:=num_table(null,null,null,null,null);
begin
dbms_output.put_line(to_char(v_num_tab.count));
v_num_tab(1):=1001;
v_num_tab(2):=1002;
v_num_tab.delete; --删除所有元素及下标
dbms_output.put_line(to_char(v_num_tab.count));--输出0
v_num_tab.extend(2);
dbms_output.put_line(to_char(v_num_tab.count));--输出2
v_num_tab(1):=10081;
v_num_tab(2):=10082;
v_num_tab.delete(2); --删除下标为2的元素的值;但下标还保存。这时可以直接给下标为2的元素赋值!!!
dbms_output.put_line(to_char(v_num_tab.count));--输出1
v_num_tab.extend(2);
dbms_output.put_line(to_char(v_num_tab.count));--输出3
dbms_output.put_line(to_char(v_num_tab.next(3)));--输出4
v_num_tab(2):=100882;
dbms_output.put_line(to_char(v_num_tab.count)); --这里输出4,因为上面对下标2的元素进行了赋值。
end;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28570326/viewspace-775099/
,如需转载,请注明出处,否则将追究法律责任。