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

package windy.learn;

import java.util.Collection;

import org.apache.commons.lang3.StringUtils;

public class OracleSqlUtils {
/**
* x,y相除,向上取整
* @param x
* @param y
* @return x,y相除,向上取整
*/
private static int ceilDiv(int x, int y) {
int r = x / y;
return r * y == x ? r : r + 1;
} public static String getOracleSQLIn(Collection<String> ids, String field) {
return getOracleSQLIn(ids, 1000, field);
} /**
* oracle sql 语句in子句中如果子句中超过1000项就会报错。这主要是oracle考虑性能问题做的限制。 如果要解决次问题,可以用
* where id (1, 2, ..., 1000) or id (1001, ...)
*
* @param ids
* in语句中的集合对象
* @param count
* in语句中出现的条件个数
* @param field
* in语句对应的数据库查询字段
* @return 返回 field in (...) or field in (...) 字符串
*/
public static String getOracleSQLIn(Collection<String> ids, int count,
String field) {
String[] idsArr = ids.toArray(new String[0]);
count = Math.min(count, 1000);
int len = idsArr.length;
int size = ceilDiv(len, count);
StringBuilder builder = new StringBuilder();
for (int i = 0; i < size; i++) {
int fromIndex = i * count;
int toIndex = Math.min(fromIndex + count, len);
String productId = StringUtils.defaultIfEmpty(
StringUtils.join(idsArr, "','", fromIndex, toIndex), "");
if (i != 0) {
builder.append(" or ");
}
builder.append(field).append(" in ('").append(productId)
.append("')");
} return StringUtils.defaultIfEmpty(builder.toString(), field
+ " in ('')");
}
}

参考:http://www.cnblogs.com/hoojo/archive/2012/08/31/2665396.html

处理 Oracle SQL in 超过1000 的解决方案的更多相关文章

  1. Oracle SQL in 超过1000 的解决方案

    处理 Oracle SQL in 超过1000 的解决方案 处理oracle sql 语句in子句中(where id in (1, 2, ..., 1000, 1001)),如果子句中超过1000项 ...

  2. oracle select in超过1000条报错解决方法

    本博客介绍oracle select in超过1000条数据的解决方法,java框架是采用mybatis的,这可以说是一种比较常见的错误:select * from A where id in(... ...

  3. oracle中的in参数超过1000的解决方案

    在oracle中,使用in方法查询记录的时候,如果in后面的参数个数超过1000个,那么会发生错误,JDBC会抛出"java.sql.SQLException: ORA-01795: 列表中 ...

  4. mybatis的oracle的in超过1000的写法

    <if test="preIds != null and preIds.size() > 0"> AND PRE_ID IN <trim suffixOve ...

  5. Oracle in不超过1000,List<String>参数拆分,代码举例

    public Map<String,Map<String, Object>> getConsInfo(List<String> consIdList) { Map& ...

  6. Oracle SQL执行缓慢的原因以及解决方案

     以下的文章抓哟是对Oracle SQL执行缓慢的原因的分析,如果Oracle数据库中的某张表的相关数据已是2亿多时,同时此表也创建了相关的4个独立的相关索引.由于业务方面的需要,每天需分两次向此表中 ...

  7. Oracle 查询 in条件个数大于1000的解决方案

    Oracle 查询 in条件个数大于1000的解决方案,我所了解的有如下四种: 1. 把in分组再or: 思路:如果list的长度为2000,可以500个分一组,就有4个组,这4个组之间再or即可. ...

  8. Oracle SQL性能优化技巧大总结

    http://wenku.baidu.com/link?url=liS0_3fAyX2uXF5MAEQxMOj3YIY4UCcQM4gPfPzHfFcHBXuJTE8rANrwu6GXwdzbmvdV ...

  9. Oracle SQL优化[转]

    Oracle SQL优化 1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化 ...

随机推荐

  1. 基于H5的移动端开发,window.location.href在IOS系统无法触发问题

    最近负责公司的微信公众号开发项目,基于H5进行开发,某些页面window.location.href在Android机上能正常运行而IOS系统上无法运行,导致无法重定向到指定页面,查了好久终于找到方法 ...

  2. Unity3D之C# yield waitforseconds

    Wait for seconds requires a couple things in order to work properly and chances are if it's not work ...

  3. liunx 下 部署并运行java项目(非web)

    1. 将这三个包上传到liunx上,之后写一个run.sh 的脚本文件,然后在lib包中上传包<sunjce-provider.jar>包. 2.启动run.sh( ./run.sh st ...

  4. 【转】File类应用 - FilenameFilter 和 FileFilter

    FilenameFilter & FileFilter FilenameFilter 和 FileFilter 都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码 ...

  5. Dynamic Programming

    We began our study of algorithmic techniques with greedy algorithms, which in some sense form the mo ...

  6. Linux内核分析学习总结

    20135125陈智威 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这学期开 ...

  7. docker 源码分析 三(基于1.8.2版本),NewDaemon启动

    本文来分析一下New Daemon的启动过程:在daemon/daemon.go文件中: func NewDaemon(config *Config, registryService *registr ...

  8. Web测试中常见分享问题

         Web测试中,由于开发通常指注重完成H5页面的逻辑功能,对各种系统.浏览器等考虑不周,同时Android端各类机型碎片化,容易产生兼容性问题,这其中以分享类型为最. 本文简单分析总结一些测试 ...

  9. Ubuntu系统下Xen虚拟机的基本安装方法(代码创建)

    Ubuntu上Xen安装虚拟机方法一dd一个空的磁盘sudo dd if=/dev/zero of=/home/vm1.img bs=1G count=8 下载Xen VM通用配置文件 sudo wg ...

  10. [转载]HDU 3478 判断奇环

    题意:给定n个点,m条边的无向图(没有重边和子环).从给定点出发,每个时间走到相邻的点,可以走重复的边,相邻时间不能停留在同一点,判断是否存在某个时间停留在任意的n个点. 分析: (1)首先,和出发点 ...