Mybatis 针对 Oracle IN 语句条件超过 1000 的解决办法

处理 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 语句长度也是有限制的,所以还要考虑整体长度问题。


添加新评论

还没有评论哟 ~