create or replace procedure GetPatInfo
(
  p_patid  in varchar,
  p_cursor out CURSOR
) is
begin
  open p_cursor for
      select *
        from inhos.advice_fee 
       where patid in (p_patid);
end GetPatInfo;-------------------------------------------------------------
存储过程要达到以下sql语句的效果
select *
from inhos.advice_fee
where patid in ('001','008')
单传一个值,比如001,存储过程是可以返回正确结果,但是传两个以上值就不行,返回结果集为空。
请问各位高手,001, 008等多个值如何从程序中传入?
或者存储过程应该如何改造?
单传001,存储过程是可以返回正确结果,但是传两个以上值就不行。

解决方案 »

  1.   

    create  or  replace  procedure  GetPatInfo  
    (  
       p_patid    in  varchar,  
       p_cursor  out  CURSOR  
    )  is  
    v_sqlString varchar2(500);
    begin  
        v_sqlString := '
        select  *  
                   from  inhos.advice_fee    
                 where  patid  in  ('||p_patid||')';
       open  p_cursor  for 
            v_sqlString; 
                
    end  GetPatInfo;  
    -------------------------------------------
    问题得到解决!!!
      

  2.   

    create  or  replace  procedure  GetPatInfo  
    (  
       p_patid    in  varchar,  
       p_cursor  out  CURSOR  
    )  is  
    v_sqlString varchar2(500);
    begin  
      v_sqlString := 'select * from inhos.advice_fee where patid in (''' || replace(p_patid,',',''',''') || ''')';
      open  p_cursor  for 
            v_sqlString; 
                
    end  GetPatInfo;  
      

  3.   

    本来嘛,这就是一个数据类型的问题。
    你需要的类型和在实际参数传入以后格式上有差异,所以就没有结果了
    拼凑Sql语句确实是个不错的选择,用heyixiang(子豚の愛人)的方法就OK
      

  4.   

    我拼凑的语句,需要传入形如 '001','002','003' 的值
    heyixiang(子豚の愛人)拼凑的语句,需要传入形如 001, 002, 003的值