select  sr.EMPLOYEE_ID as EMPLOYEE_ID ,
        user_p.GET_CONFIGROLEID('') 
        from
        sys_user sr
        where
        sr.id in ('8a58bc033699dc0501369b1a02440019','8a58bc03369b95e801369b9846ad0002')
         以上sql能查出数据
         
       -- sr.id in (user_p.GET_CONFIGROLEID('')) 用这个查不出数据??以上sql中,user_p.GET_CONFIGROLEID('') 是我写的一个函数,返回'8a58bc033699dc0501369b1a02440019','8a58bc03369b95e801369b9846ad0002' 这个字符串,为啥我用sr.id in (user_p.GET_CONFIGROLEID('')) 用这个查不出数据啊??

解决方案 »

  1.   

    又是这个问题
    你返回的字符串是'8a58bc033699dc0501369b1a02440019,8a58bc03369b95e801369b9846ad0002'
    而你要的是'8a58bc033699dc0501369b1a02440019','8a58bc03369b95e801369b9846ad0002'
    分离下就OK
    select  sr.EMPLOYEE_ID as EMPLOYEE_ID ,
            user_p.GET_CONFIGROLEID('') 
            from
            sys_user sr
            where
            sr.id in
    (select  regexp_substr(user_p.GET_CONFIGROLEID(''), '[^,]+', 1, rownum) from dual
    connect by rownum <= length(regexp_replace(user_p.GET_CONFIGROLEID(''), '[^,]'))+1)
      

  2.   

    楼上多谢帮助,不过我这个user_p.GET_CONFIGROLEID('') 函数返回的确实是'8a58bc033699dc0501369b1a02440019','8a58bc03369b95e801369b9846ad0002' 这种格式,
      

  3.   

    你跟踪下sql,把sql拿出来测试啊!
      

  4.   


    返回的是什么都没用,in函数需要的是(?,?,?...)
    你返回一个字符串,拼得再好,它也是in(?) 
    说白了,它要的是字符和逗号,你给的是字符里面的逗号。只有传一个的时候它才好使。
      

  5.   


    create or replace FUNCTION GET_CONFIGROLEID(str VARCHAR2) RETURN VARCHAR2 IS
        v_Hr_Employee_Names VARCHAR2(4000);
        v_str varchar2(4000);
      BEGIN
       
        BEGIN
        select '124;456;789'  INTO v_str from 
        dual; 
        
       v_Hr_Employee_Names := chr(39)||replace(v_str,';',''',''')||chr(39);
      
         
        EXCEPTION
          WHEN OTHERS THEN
            v_Hr_Employee_Names := 'WRONG MESSAGE';
        END;
        RETURN v_Hr_Employee_Names;
      END GET_CONFIGROLEID;
      --返回'123','456','789'这样的字符串因为我在一个sql里想这样调用  select * from aaa where aaa.id in (GET_CONFIGROLEID('')) 想实现这种方法 该怎么做啊 求助