запрос предложения oracle 10g IN

Пожалуйста, игнорируйте очевидные синтаксические недостатки в приведенном ниже:

У меня есть такой sql как именованный запрос:

select saalry from emp where emp_id in (:id)

id имеет номер типа, который я хотел передать в списке, разделенном запятыми, например:

String id = 121,123,456

Но я получаю ORA-01722: invalid number Как передать список идентификаторов, разделенных запятыми, в предложение IN?


person Victor    schedule 23.03.2011    source источник
comment
вы говорите id is of type number, но передаете его как строку.   -  person Sathyajith Bhat    schedule 26.03.2011


Ответы (2)


Предполагая, что :id — это строка, содержащая относительно короткий список чисел, разделенных запятыми (например, '123,456,789'), этого может быть достаточно для вас:

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

Однако он не будет работать так же хорошо, поскольку вряд ли будет использовать индекс для emp_id.

person Jeffrey Kemp    schedule 01.04.2011
comment
Ответ достаточно хорош, хотя я бы использовал коллекции и оператор TABLE, чтобы можно было использовать индекс. - person Rob van Wijk; 11.08.2011