create or replace function get_offiname(pni_offiname varchar2)
return VARCHAR is
 
 
  RESULT VARCHAR2(1000);
begin
     
        for cur1 in (select t.office_id from new_alm_offi t
                    where to_char(t.office_id) in (pni_offiname)
                    )
     LOOP
            RESULT := result||chr(39)||TRIM(cur1.office_id)||chr(39)||',';
            
     END LOOP;              
     result := '('||substr(result,1,length(result)-1)||')';
       
  return(RESULT);
end get_offiname;
------------------------------------------------
我的pni_offiname参数需要输入 1001,1002,1003
把这个参数直接拿到sql中执行没问题,但在test这个函数的时候总是不成功,
输入一个参数,比如1001 没问题,返回('1001')   但输入1001,1002却没有返回,就只有一个()  ,而我想得到的结果是('1001','1002')
好像这个函数没有执行sql就到result了

解决方案 »

  1.   

    输入参数是varchar2类型,1001,1002算是什么类型呢?呵呵
    当然不对了
      

  2.   

    to_char(pni_offiname) 也不行啊
      

  3.   

    问题在:
            for cur1 in (select t.office_id from new_alm_offi t
                        where to_char(t.office_id) in (pni_offiname)
    的in 处理上输入1001,1002肯定只能返回t.office_id ='1001,1002'而不是你要的结果是('1001','1002')可以考虑改成
     where instr( ','||pni_offiname||',', ','||to_char(t.office_id)||',')>0