ORA-01795: 列表中的最大表达式数为1000的解决方法
IN中的数据量不能超过1000条。
解决方案:把条件分成多个少于1000的IN即:
DELETE
FROM
T_MM_SECTION_SITE_UPDATE
WHERE T.T_MM_SECTION_SL_ID IN ('1', '2', '3',...,'1000') OR IN ('1001', '1002', ..., '2000') OR ...
String str = this.GetWhereInValuesSql("T_MM_SECTION_SL_ID",Idlist,800);
/** * 获取where in语句 * * @param column 字段名 * @param values 值集合 * @param num 数量 * @return where in语句 */ @SuppressWarnings("unused") String GetWhereInValuesSql(String column, List<String> values,int num) { // sql语句 String sql = "("; // 值的个数 int valueSize = values.size(); // 批次数 int batchSize = valueSize / num + (valueSize % num == 0 ? 0 : 1); for (int i = 0; i < batchSize; i++) { if (i > 0) { sql += ") or "; } sql += column+" in ("; for (int j = i * num; ( j < (i + 1) * num) && j < valueSize; j++) { if (j > i * num) { sql += ","; } sql += "'" + values.get(j) + "'"; } } sql += "))"; return sql; }
mmSectionOrderQueryDao.deleteBatchQuery(str);
//批量删除(查询表)
void deleteBatchQuery(@Param("str")String str);
<!--批量删除查询表-->
<delete id="deleteBatchQuery" parameterType="java.lang.String">
DELETE
FROM
T_MM_SECTION_SITE_UPDATE
WHERE
1=1
<if test="str != null">
AND ${str}
</if>
</delete>