如果我们在拼接where in时,其item的个数超过1000,在sql执行时会抛出ORA-01795异常

   /**
     * 获取where in语句
     *
     * @param column      字段名
     * @param values      值集合
     * @return (pk_test in ('a','b','c') or pk_test in ('d','e','f'))
     */
    private String GetWhereInValuesSql(String column, List<String> values) {
        // sql语句
        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 += ") or ";
            }
            sql += column+" in (";
            for (int j = i * 1000; ( j < (i + 1) * 1000) && j < valueSize; j++) {
                if (j > i * 1000) {
                    sql += ",";
                }
                sql += "'" + values.get(j) + "'";
            }
        }
        sql += "))";
        return sql;
    } 
posted @ 2021-06-16 09:39  亚州Asu  阅读(59)  评论(0编辑  收藏  举报