Процедура не понимает IN (idpara)
с idpara, равным '1','2','3'
как IN ('1','2','3')
, но как IN (q'!'1','2','3'!')
.Другими словами, он ищет не '1'
и '2'
и '3'
, а '1,2,3'
.Но в то время как '1'
может быть преобразовано в число, '1,2,3'
не может.
Вот тестовый пример для вас, чтобы показать вам:
select * from dual;
-- X
-- notice I have 'X' in the in list below
set serveroutput on
declare
idpara varchar2(400) := q'!'X','2','3'!';
v_out varchar2(400);
begin
select count(*) into v_out from dual where dummy in (idpara);
dbms_output.put_line(v_out);
end;
/
-- 0
declare
idpara varchar2(400) := q'!'X','2','3'!';
v_out varchar2(400);
sql_stmt VARCHAR2(1000) := NULL;
begin
sql_stmt :='select count(*) from dual where dummy in ('||idpara||')';
execute immediate sql_stmt into v_out;
dbms_output.put_line(v_out);
end;
/
-- 1
Одно решение внутри procname
будет построить объект чисел pl / sql и использовать его в обновлении.Существует много информации о том, как это сделать.Например, Преобразование разделенной запятыми строки в массив в PL / SQL А вот информация о том, как использовать объект в предложении IN Массив в предложении IN () oracle PLSQL