1

次のように、SQL で「where... in」を使用して一連の要素を削除する方法はありますか。

HashSet<String> idStrings = ...;
SimpleJdbcTemplate template = getTemplate();
template.update("DELETE FROM records WHERE idstring IN (?)", idStrings);

このメソッドを使用する古いコードを機能させようとしていますが、実行しようとすると、Oracle JDBC ドライバーが例外をスローします。

QL 状態 [99999]; エラーコード [17004]; 列タイプが無効です。ネストされた例外は java.sql.SQLException: Invalid column type です

これは、ojdbc5 11.2.0.1.0 および spring-jdbc 3.0.3 にあります。

4

1 に答える 1

1

It's possible, but you need one placeholder (?) per ID, and each ID must be bound separately.

You could also use NamedParameterJdbcTemplate, which

[...] also allows for expanding a List of values to the appropriate number of placeholders.

Be careful not to put too many values in the set of IDs. Oracle limits them to 1000, for example.

于 2012-01-12T14:58:30.893 に答える