• 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>

  • 相关阅读:
    自制游戏Zombie代码
    HNOI2020总结
    20200615题解:继续扮演
    20200611题解:树网的核
    历次考试总结
    寒假总结和省选大体规划
    每日总结
    有一种感动叫ACM(记WJMZBMR在成都赛区开幕式上的讲话)
    递推求欧拉函数的最简单的详解
    总结一些好用的C++小技巧
  • 原文地址:https://www.cnblogs.com/acme6/p/9139907.html
Copyright © 2020-2023  润新知