2017-02-22 36 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 

有人能告诉我,我要去哪里错了吗?

非常感谢。

干杯

亚历

+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

ü,欢迎:) –