为什么我不能从集合(数组)PLSQL中删除元素

时间:2018-10-12 13:03:31

标签: oracle plsql collections

在此处理程序中,我删除NULL元素:

if p_arr(i) is null then
    p_arr.delete(p_arr(i));
end if;

,但null元素仍在集合中。我该如何纠正? 任务是对集合中的元素进行排序,但条件是集合中可以为NULL。我应该删除它们。

declare   
p_arr dbms_sql.Number_Table;   
i pls_integer;  

procedure do_sort(p_arr in out dbms_sql.Number_Table, p_asc in boolean 
default null, p_nulls_last in boolean default null) is   
x pls_integer;  
p_temp number;

begin  

for i in -1..p_arr.COUNT - 2 

loop   
  if p_arr(i) is null then
    p_arr.delete(p_arr(i));
  end if;        

end loop;  

end; 

begin   
p_arr(-1) := 0;   
p_arr(0) := -2;   
p_arr(1) := 10.1;   
p_arr(2) := null;    
p_arr(3) := 10.1;   
p_arr(4) := -1;  

do_sort(p_arr); 

i := p_arr.first;   

while i is not null loop   
  dbms_output.put_line('arr('||i||') = '||nvl(to_char(p_arr(i)), 
'null')||';');   
i := p_arr.next(i);   
end loop;   

end; 

1 个答案:

答案 0 :(得分:2)

那是因为您将元素本身作为参数传递给delete,而不是索引

p_arr.delete(p_arr(i))等同于p_arr.delete(NULL)-因此它根本不会删除任何内容。

因此,将其更改为p_arr.DELETE(i)即可。