PLSQL存储过程未给出结果
上面的存储过程没有显示任何结果,变量countexcever声明为一个数字。请帮助我更正查询。问题在PLSQL存储过程未给出结果,plsql,plsqldeveloper,Plsql,Plsqldeveloper,上面的存储过程没有显示任何结果,变量countexcever声明为一个数字。请帮助我更正查询。问题在 其中k.unique_id位于(“| | p|id_list | |”) 你是说要找记录吗 where unique_id='| | p|u id_list |' 与它的类型完全相同,但您需要的是将该变量作为值列表处理 假设你有一张这样的桌子 select count(*) INTO countExceed from uid_emp_master k where k.unique_id i
其中k.unique_id位于(“| | p|id_list | |”)
你是说要找记录吗
where unique_id='| | p|u id_list |'
与它的类型完全相同,但您需要的是将该变量作为值列表处理
假设你有一张这样的桌子
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;
您的输入字符串是'id1,id3,1d8'
我认为有两种方法可以满足你的需要;一种是使用动态SQL,例如:
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
)
另一种方法是将字符串拆分为一个值列表,然后在中的中简单地使用生成的列表
关于如何在Oracle中拆分逗号分隔的列表字符串,有很多答案。您还需要为select
语句运行executeimmediate。我猜p_id_list是一个由这个列表组成的变量,你也需要为它创建一个动态sql。你能发布一个p_id_list的例子吗?还有,你是怎么运作的?这是在PL/SQL块内还是完全按照发布的方式运行?这是plsql块。。。p_id_列表就像?是逗号分隔的列表吗?它包含引号吗?逗号分隔的列表就像Raj11883108666f一样
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;