select count(*)
INTO countExceed
from uid_emp_master k
where k.unique_id in (select k.reviewer_uid
from uid_rm_hierarchy k
where k.unique_id in ('||p_ID_list||'))
and k.band IN( 'A','B','C','D');
if (countExceed > 0) then
quer :='UPDATE UID_RM_HIERARCHY I
SET I.REVIEWER_UID in (SELECT L.REVIEWER_UID
FROM UID_RM_HIERARCHY L
WHERE L.UNIQUE_ID in ('||p_ID_list||') )
WHERE I.REVIEWER_UID in('||p_ID_list||')
and isdeleted=0';
EXECUTE IMMEDIATE quer ;
END IF;
上面的存储过程没有显示变量countExceed声明为数字的任何结果,请帮助我更正查询。
答案 0 :(得分:0)
问题出在
where k.unique_id in ('||p_ID_list||'))
在这里您要查找记录
where unique_id = '||p_ID_list||'
与输入的类型完全相同,但是您需要将该变量作为值列表进行处理。
假设您有一个这样的表
create table tabTest(id) as (
select 'id1' from dual union all
select 'id2' from dual union all
select 'id3' from dual union all
select 'id4' from dual
)
,您的输入字符串为'id1,id3,1d8'
;
我看到两种方法来完成您需要的工作;一种是动态SQL,例如:
declare
vResult number;
vList varchar2(199) := 'id1,id3,1d8';
vSQL varchar2(100);
begin
vSQL :=
'select count(*)
from tabTest
where id in (''' || replace (vList, ',', ''', ''') || ''')';
--
execute immediate vSQL into vResult;
--
dbms_output.put_line('Result: ' || vResult);
end;
另一种方法是将字符串分成值列表,然后在IN
中简单地使用结果列表。
为此,关于如何在Oracle中拆分以逗号分隔的列表字符串有很多答案。