将数组作为参数传递给plsql过程

时间:2016-01-20 08:31:25

标签: stored-procedures plsql oracle-sqldeveloper

我需要和sql开发人员一起玩,我在这里碰到了一堵墙...... 我需要在表上运行一个简单的更新查询,我想传入一个ID数组并更新那些ID指向的所有行。

我编写了以下存储过程

PROCEDURE SAMPLE_PROCEDURE(SAMPLE_ARRAY IN NUM_ARRAY)
AS
BEGIN
UPDATE RETURNLIST_PICKLIST_MAPPING 
SET PICKLIST_ID = 1111111 
WHERE RETURNLIST_ID IN (SELECT * FROM TABLE(SAMPLE_ARRAY));
END SAMPLE_PROCEDURE;

NUM_ARRAY是一个定义如下的自定义类型

create or replace 
TYPE NUM_ARRAY 
AS VARRAY(40) OF NUMBER(38, 0);

当我在sql developer中运行存储过程时,我想输入SAMPLE_ARRAY的值。我已尝试(2222,1111,1234)[2222,1111,1234]以及{2222,1111,1234},每次我都会收到“表达式错误类型”错误。

我迫切需要帮助这些家伙......

1 个答案:

答案 0 :(得分:3)

您没有显示如何为varray变量赋值。但是,我相信你可以这样做:

DECLARE 
V_T NUM_ARRAY;
BEGIN
V_T := NUM_ARRAY(1,2,3);
SAMPLE_PROCEDURE(V_T);
END;
/

通常,您可以按如下方式定义独立VARRAY:

CREATE Or REPLACE TYPE varray_type_name AS VARRAY(n) OF <element_type>;

或者,在PL / SQL块中:

TYPE varray_type_name IS VARRAY(n) of <element_type>

有关详细信息,请参阅this