PLSQL存储过程未给出结果

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

上面的存储过程没有显示任何结果,变量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 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;