2016-01-20 3 views
0

Мне нужно было играть с разработчиком sql, и я столкнулся с этой стеной здесь ... Мне нужно запустить простой запрос на обновление в таблице, и я хочу передать массив Идентификаторы и обновите все строки, указанные этими идентификаторами.Передача массивов в качестве параметров для процедуры 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 Developer я хочу, чтобы ввести значение для 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

Смежные вопросы