배열에서 요소를 제거해야합니다. 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
한 번에 모두 삭제하지 않습니다. 예를 들어 작동합니다. 선언 된 배열이 1 2 3 4 5이고 n = 2 인 경우, array.delete (n) 배열 뒤에는 두 개의 요소 만 포함됩니다. 1과 2 – kuldarim
하지만 당신의 알고리즘에 관해서는 의미가 있습니다. 문제는 언제 일어나는 것입니까? 내 말은, 익명 블록을 열고 시도해 보면 잘 작동하는 것입니다. 나는 당신의 알고리즘이 문제라고 생각합니다. http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/collection_method.htm – Sebas