ORA-01795:myibatis中列表中的最大表达式数为1000错误

时间:2018-02-04 14:50:15

标签: java oracle foreach ibatis

我正在使用IN子句编写更新查询,我在其中传递List

update table set postcode={#postcode} where id in
<foreach collection="addresses" index="index" item="item" open="(" 
separator="," close=")">#{item}</foreach> 

当我在地址中记录的记录少于1000条时运行正常。如果有超过1000条记录我得到以下错误:

ORA-01795:列表中的最大表达式数为1000。 如何处理?我遇到了一些他们在hibernate中处理过的线程。如何使用超过1000条记录的myibatis来处理它。

2 个答案:

答案 0 :(得分:0)

将所有这些值存储到单独的表中,然后在子查询中将其用作

update table set
  postcode = some_value
where id in (select values from a_separate_table)

答案 1 :(得分:0)

  

ORA-01795:列表中的最大表达式数为1000

IN子句中严格的表达总数小于1000之前,无法处理此问题。

或者,您也可以将查询分成多个和您的列表,并执行UNION以实现相同的目标。