zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    java 基础笔记 基本数据类型对象包装类
    java String 类 基础笔记
    java 线程 笔记 基础
    java 线程 基础笔记2
    java 异常学习 笔记
    广告简单概念整理-持续更新
    curl一些使用技巧
    简单学习正则表达式
    Linux命令简单操作之lsof
    Linux命令简单操作之find和xargs
  • 原文地址:https://www.cnblogs.com/acme6/p/9139907.html
Copyright © 2011-2022 走看看