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

可以,但是每个 ID 需要一个占位符 ( ?),并且每个 ID 必须单独绑定。

您还可以使用NamedParameterJdbcTemplate,它

[...] 还允许将值列表扩展到适当数量的占位符。

注意不要在 ID 集中放置太多值。例如,Oracle 将它们限制为 1000。

于 2012-01-12T14:58:30.893 回答