oracle 10g IN запрос пункта - PullRequest
       29

oracle 10g IN запрос пункта

1 голос
/ 23 марта 2011

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

У меня есть sql в виде именованного запроса:

select saalry from emp where emp_id in (:id)

идентификатор типа номер Я хотел передать список через запятую, например:

String id = 121,123,456

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

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011

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

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

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

0 голосов
/ 11 августа 2011

Есть еще один путь от 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 );
...