oracle 10g IN子句查询

请忽略下面明显的语法缺陷: 我有一个像这样的SQL作为命名查询:
select saalry from emp where emp_id in (:id)
id是类型编号 我想传入一个逗号分隔的列表,如下所示:
String id = 121,123,456
但我得到了
ORA-01722: invalid number
如何将逗号分隔的id列表传递给IN子句?     
已邀请:
假设
:id
是一个包含相对较短的逗号分隔数字列表的字符串(例如
'123,456,789'
),这对您来说可能就足够了:
select saalry from emp
where INSTR( ',' || :id || ','
           , ',' || TRIM(TO_CHAR(emp_id)) || ','
           ) > 0;
然而,它不会表现得那么好,因为它不太可能在
emp_id
上使用索引。     
还有另一种方法来自http://blogs.oracle.com/aramamoo/entry/how_to_split_comma_separated_string_and_pass_to_in_clause_of_select_statement 他们的例子是
select regexp_substr('SMITH,ALLEN,WARD,JONES','[^,]+', 1, level) from dual
connect by regexp_substr('SMITH,ALLEN,WARD,JONES', '[^,]+', 1, level) is not null;
哪个可以放入in子句中
 select * from emp where ename in (
   select regexp_substr('SMITH,ALLEN,WARD,JONES','[^,]+', 1, level) from dual
   connect by regexp_substr('SMITH,ALLEN,WARD,JONES', '[^,]+', 1, level) is not null );
    

要回复问题请先登录注册