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





本文转自hoojo博客园博客,原文链接:http://www.cnblogs.com/hoojo/archive/2012/08/31/2665396.html,如需转载请自行联系原作者
目录
相关文章
|
18天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
16 0
|
3月前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
87 0
|
10天前
|
SQL 数据库 索引
SQL索引失效原因分析与解决方案
SQL索引失效原因分析与解决方案
19 0
|
1月前
|
SQL Oracle 关系型数据库
Oracle系列十一:PL/SQL
Oracle系列十一:PL/SQL
|
1月前
|
SQL Oracle 关系型数据库
Oracle系列之八:SQL查询
Oracle系列之八:SQL查询
|
3月前
|
SQL 存储 Oracle
oracle如何定期备份数据库sql文件
【1月更文挑战第7天】oracle如何定期备份数据库sql文件
58 8
|
3月前
|
SQL Oracle 关系型数据库
Oracle PL/SQL基础知识及应用案例
Oracle PL/SQL基础知识及应用案例
33 0
|
SQL Oracle 关系型数据库
Oracle SQL优化之多表连接
Oracle SQL优化之多表连接
430 0
Oracle SQL优化之多表连接
|
SQL 关系型数据库 Oracle
ORACLE SQL优化之ORA-03150&ORA-02055&ORA-02063
                                                                                                             >   
4763 0
|
SQL 存储 Oracle
Oracle SQL语句优化方法总结
  1、SQL语句尽量用大写的   因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行。   2、使用表的别名   当在SQL语句中连接多个表时, 尽量使用表的别名并把别名前缀于每个列上。这样一来,   就可以减少解析的时间并减少那些由列歧义引起的语法错误。   3、选择最有效率的表名顺序(只在基于规则的优化器(RBO)中有效)
166 0