2017-02-22 6 views
0

Oracleに新しく、配列から値を削除する際に問題が発生しました。私がしようとしているのは:1、2、3、4の配列を持っている場合、データベースがこの配列の値を処理して3に移動したら、2を取り除きたい。アレイからの値の削除PL¥SQL

コード ' M使用は、次のとおりです。

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 

誰かが私が間違っているつもりだところを教えてもらえますか?

ありがとうございます。

乾杯

あなたが入力パラメータを変更することはできませんアレックス

+0

は、パラメータ定義を変更してみてください、次のように試してみてください: 'IN OUTのparv_testは –

+1

コピーparv_testをtest_array'ローカルパラメータには、入力パラメータ –

+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、再歓迎:) –

関連する問題