请忽略以下明显的语法缺陷:
我有一个这样的sql作为命名查询:
select saalry from emp where emp_id in (:id)
id的类型为number 我想传入一个逗号分隔的列表,如下所示:
String id = 121,123,456
但我得到ORA-01722: invalid number
如何将逗号分隔的id列表传递给IN子句?
答案 0 :(得分:2)
假设:id
是一个包含相对较短的逗号分隔数字列表的字符串(例如'123,456,789'
),这对您来说已经足够了:
select saalry from emp
where INSTR( ',' || :id || ','
, ',' || TRIM(TO_CHAR(emp_id)) || ','
) > 0;
然而,它不会表现得那么好,因为它不太可能在emp_id
上使用索引。
答案 1 :(得分:0)
他们的例子是
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 );