我需要從數組中刪除元素。我試圖使用array.delete(n)函數,但它刪除標識符n的所有元素。如何刪除確切的元素n?pl/sql從數組中刪除元素
例如,如果陣列是1 2 3 4 5,並且n = 3,刪除後它應該看起來像以下1 2 4 5
我迄今代碼:
DECLARE
/* declare type array */
TYPE number_index_by_number IS TABLE OF number INDEX BY binary_integer;
v_n NUMBER := &sv_n;
v_m NUMBER := &sv_m;
v_min Number;
v_tmp Number;
v_array number_index_by_number;
v_sorted_array number_index_by_number;
begin
for i in 1..v_n
loop
v_array(i) := dbms_random.value(1,1000);
end loop;
for j in v_array.first..v_array.last
loop
DBMS_OUTPUT.put_line('v_array('||j||') :'||v_array(j));
end loop;
<<i_loop>> for i in 1..v_m
loop
/*set first array value to variable min*/
v_min := v_array(1);
v_tmp := 1;
<<j_loop>> for j in v_array.first..v_array.last
loop
DBMS_OUTPUT.put_line('v_array('||j||') :'||v_array(j));
if (v_min > v_array(j)) THEN
begin
v_min := v_array(j);
v_tmp := j;
DBMS_OUTPUT.put_line(j);
end;
end if;
end loop;
/*problem is in at this line*/
v_array.delete(v_tmp);
v_sorted_array(i) := v_min;
end loop;
for i in v_sorted_array.first..v_sorted_array.last
loop
DBMS_OUTPUT.put_line('v_sorted_array('||i||') :'||v_sorted_array(i));
end loop;
end;
你有什麼症狀一次性刪除v_array? – Sebas 2013-03-09 19:08:32
它不會一次全部刪除。它的作用就像例如。如果聲明的數組是1 2 3 4 5,且n = 2,則在array.delete(n)數組僅包含兩個元素之後。 1和2 – kuldarim 2013-03-09 19:13:54
,但它對你的算法有意義。問題是什麼時候發生的?我的意思是,只要打開一個匿名塊並嘗試一下,就會發現它工作正常。我認爲你的算法是問題。 http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/collection_method.htm – Sebas 2013-03-09 19:20:33