2017-02-22 34 views
0

Я новичок в Oracle и имею проблему с удалением значения из массива. Я пытаюсь: Если у меня есть массив с 1, 2, 3, 4, я хочу удалить 2, как только база данных обработала это значение массива, а затем переместится на 3.Oracle удаляет значение из массива PL SQL

Код I ' м использую:

type test_rec is record (temp_id number, 
     pos1 number, 
     pos2 number, 
     pos3 number); 

type test_array is table of test_rec index by binary_integer; 

PROCEDURE pr_test (
parv_test IN test_array) 
AS 
BEGIN 
FOR i in parv_test.first .. parv_test.last LOOP 
    IF parv_test(i).action_type = 'I' THEN 
     INSERT STATEMENT 

     parv_test.delete(i); 
    END IF; 
END LOOP; 
END pr_test ; 

Однако я получаю ошибку:

PLS-00363: expression 'parv_test' cannot be used as an assignment target 

Может кто-нибудь сказать мне, где я неправильно?

Большое спасибо.

Приветствия

Alex

+0

Попробуйте изменить определение параметра: 'parv_test IN OUT test_array' –

+1

копии parv_test к локальному параметру, вы не можете изменить входной параметр –

+0

Спасибо, оба отлично работали. Все отсортировано сейчас –

ответ

0

Вы не можете изменить входной параметр,

Попробуйте, как это,

create or replace package body test_pkg is 

    type test_rec is record(temp_id number, 
           pos1 number, 
           pos2 number, 
           pos3 number, 
           action_type varchar2(1)); 

    type test_array is table of test_rec index by binary_integer; 

    PROCEDURE pr_test(parv_test IN test_array) AS parv_test_local test_array; 
BEGIN 
    parv_test_local := parv_test; 
    FOR i in parv_test_local.first .. parv_test_local.last LOOP 
    IF parv_test_local(i).action_type = 'I' THEN 
     --INSERT STATEMENT 

     parv_test_local.delete(i); 
    END IF; 
    END LOOP; 
END pr_test; 

begin 
null; 
end test_pkg; 
+1

, которые отлично работают! –

+0

U, приветствуем :) –