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>

 

posted @ 2018-06-05 15:09  极致网络科技  阅读(18170)  评论(0编辑  收藏  举报