处理 oracle sql 语句in子句中where id in (1, 2, ..., 1000, 1001),如果子句中超过 1000 项就会报错。

这主要是 oracle 考虑性能问题做的限制。如果要解决此问题,可以用 where id (1, 2, ..., 1000) or id (1001, ...)

代码段

...
where id in
<foreach collection="params.ids.split(',')" item="id" index="index" open="(" separator="," close=")">
  <if test="(index % 999) == 998">
    null ) or id in (
  </if>
  #{id}
</foreach>

SQL 语句长度也是有限制的,所以还要考虑整体长度问题。