2016-01-20 83 views
0

我需要与SQL Developer的玩弄和我在这里撞上了墙...... 我需要运行一个表上的简单更新查询,我想在一个数组来传递Ids并更新这些Ids指向的所有行。传递数组作为参数,以PLSQL过程

我已经写以下存储过程

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显影剂存储过程欲输入SAMPLE_ARRAY值。我曾尝试(2222,1111,1234)[2222,1111,1234]{2222,1111,1234},每次我得到“表达类型错误”的错误。

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

回答

2

你没有表现出你是怎么赋值的变量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了解更多详情

+0

谢谢,解决了问题... –

+0

如何检测NUM_AR RAY通过ADO.net? –

+0

@HorribleGuy对不起,这是我的知识。我建议你发布另一个问题并标记ADO – Hawk