1

请忽略以下明显的语法缺陷:

我有一个这样的 sql 作为命名查询:

select saalry from emp where emp_id in (:id)

id 是数字类型,我想传递一个逗号分隔的列表,如下所示:

String id = 121,123,456

但是我得到了ORA-01722: invalid number 如何将逗号分隔的 id 列表传递给我的 IN 子句?

4

2 回答 2

2

假设:id一个字符串包含一个相对较短的逗号分隔的数字列表(例如'123,456,789'),这对您来说可能就足够了:

select saalry from emp
where INSTR( ',' || :id || ','
           , ',' || TRIM(TO_CHAR(emp_id)) || ','
           ) > 0;

但是,它的性能不会那么好,因为它不太可能在emp_id.

于 2011-04-01T06:32:08.857 回答
0

还有另一种方法来自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 );
于 2011-08-11T11:17:43.243 回答