oracle 10g IN запрос пункта
Пожалуйста, игнорируйте очевидные недостатки синтаксиса в следующем:
У меня есть SQL, как это как именованный запрос:
select saalry from emp where emp_id in (:id)
id имеет номер типа, который я хотел передать в списке через запятую, например так:
String id = 121,123,456
Но я получаю ORA-01722: invalid number
Как передать разделенный запятыми список идентификаторов в мое предложение IN?
2 ответа
Если предположить, :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;
Который может быть включен в пункт
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 );