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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM