请忽略以下明显的语法缺陷:
我有一个这样的 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
.
他们的例子是
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 );