首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-09-09 
处理 Oracle SQL in 超过1000 的解决方案处理oracle sql 语句in子句中(where id in (1, 2, ..., 1000, 100

处理 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 ('')");}


热点排行