在我们写sql时候,where in 中的条目数超过1000条时候会报ORA_01795

2022/5/27 2:20:27

本文主要是介绍在我们写sql时候,where in 中的条目数超过1000条时候会报ORA_01795,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

数据库中in 条件最多允许1000项,这里我们处理一下
/**
 * @description
 * @date 2022/5/26 13:20
 * @param column 列名
 * @param values 项目集合
 */
public static String GetWhereInValuesSql2(String column, List<String> values) {
        // sql语句
        StringBuilder sql = new StringBuilder("(");
        long t1 = new Date().getTime();
//        String sql = "(";
        // 值的个数
        int valueSize = values.size();
        // 批次数
        int batchSize = valueSize / 1000 + (valueSize % 1000 == 0 ? 0 : 1);
        for (int i = 0; i < batchSize; i++) {
            if (i > 0) {
                sql.append(") or ") ;
            }
            sql.append(column).append(" in (");
            for (int j = i * 1000; ( j < (i + 1) * 1000) && j < valueSize; j++) {
                if (j > i * 1000) {
                    sql.append(",");
                }
                sql.append("'").append(values.get(j)).append("'");
            }
        }
        sql.append("))");

        long t2 = new Date().getTime();
        System.out.println("t1="+t1);
        System.out.println("t2="+t2);
        System.out.println(t2-t1);
        return sql.toString();
    }

//这里我们调用一下,测试是否正确

public static void main(String[] args) {
    List kk = new ArrayList();
    for (int i = 0; i < 50000; i++) {
        kk.add(i+"b");
    }

    System.out.println(GetWhereInValuesSql2("age",kk));

}



这篇关于在我们写sql时候,where in 中的条目数超过1000条时候会报ORA_01795的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程