C/C++教程

处理 Oracle SQL in 超过1000 的解决方案

本文主要是介绍处理 Oracle SQL in 超过1000 的解决方案,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

处理oracle sql 语句in子句中(where id in (1, 2, ..., 1000, 1001)),如果子句中超过1000项就会报错。
这主要是oracle考虑性能问题做的限制。如果要解决次问题,可以用 where id (1, 2, ..., 1000) or id (1001, ...)

 

/**
 * <b>function:</b> 处理oracle sql 语句in子句中(where id in (1, 2, ..., 1000, 1001)),
 * 如果子句中超过1000项就会报错。
 * 这主要是oracle考虑性能问题做的限制。
 * 如果要解决次问题,可以用 where id (1, 2, ..., 1000) or id (1001, ...)
 * @author hoojo
 * @createDate 2012-8-31 下午02:36:03
 * @param ids in语句中的集合对象
 * @param count in语句中出现的条件个数
 * @param field in语句对应的数据库查询字段
 * @return 返回 field in (...) or field in (...) 字符串
 */
private String getOracleSQLIn(List<?> ids, int count, String field) {
    count = Math.min(count, 1000);
    int len = ids.size();
    int size = len % count;
    if (size == 0) {
        size = len / count;
    } else {
        size = (len / count) + 1;
    }
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < size; i++) {
        int fromIndex = i * count;
        int toIndex = Math.min(fromIndex + count, len);
        //System.out.println(ids.subList(fromIndex, toIndex));
        String productId = StringUtils.defaultIfEmpty(StringUtils.join(ids.subList(fromIndex, toIndex), "','"), "");
        if (i != 0) {
            builder.append(" or ");
        }
        builder.append(field).append(" in ('").append(productId).append("')");
    }
    
    return StringUtils.defaultIfEmpty(builder.toString(), field + " in ('')");
}

 

这篇关于处理 Oracle SQL in 超过1000 的解决方案的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!