1

以下の明らかな構文上の欠陥は無視してください。

名前付きクエリとして次のようなSQLがあります。

select saalry from emp where emp_id in (:id)

id は、次のようなカンマ区切りのリストで渡したい数値型です。

String id = 121,123,456

しかし、私は取得ORA-01722: invalid number しています カンマ区切りのIDのリストをIN句に渡すにはどうすればよいですか?

4

2 に答える 2

2

:id比較的短いカンマ区切りの数字のリスト(例)を含む文字列であると仮定すると'123,456,789'、これで十分な場合があります。

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

ただし、でインデックスを使用する可能性は低いため、パフォーマンスは低下しますemp_id

于 2011-04-01T06:32:08.857 に答える
0

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;

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 );
于 2011-08-11T11:17:43.243 に答える