以下の明らかな構文上の欠陥は無視してください。
名前付きクエリとして次のようなSQLがあります。
select saalry from emp where emp_id in (:id)
id は、次のようなカンマ区切りのリストで渡したい数値型です。
String id = 121,123,456
しかし、私は取得ORA-01722: invalid number
しています カンマ区切りのIDのリストをIN句に渡すにはどうすればよいですか?
: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;
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 );