在此处理程序中,我删除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;
答案 0 :(得分:2)
那是因为您将元素本身作为参数传递给delete
,而不是索引
p_arr.delete(p_arr(i))
等同于p_arr.delete(NULL)
-因此它根本不会删除任何内容。
因此,将其更改为p_arr.DELETE(i)
即可。