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('')) 用这个查不出数据啊??
你返回的字符串是'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)
返回的是什么都没用,in函数需要的是(?,?,?...)
你返回一个字符串,拼得再好,它也是in(?)
说白了,它要的是字符和逗号,你给的是字符里面的逗号。只有传一个的时候它才好使。
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('')) 想实现这种方法 该怎么做啊 求助