Oracle sql in关键字使用长度超过1000问题处理

在一次的工作中,由于自己的疏忽忘记了sql中in关键字的一个细节(in长度不能超过1000)导致生产sql报错:

 java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000

解决办法如下:
1.根据工具类进行列表分割

/*** 分割工具:分割成N个List**/
public static <T> List< List<T> > split( List<T> list , int offset ){return CollectionUtils.isEmpty( list ) ? null : executeSplit( list , offset <= 0 ? defOffset : offset );
}private static synchronized <T> List < List<T> > executeSplit( List<T> list, int offset ) {int size = list.size();int initialCapacity = size / offset ;if ( size % offset != 0 ){initialCapacity++;}List < List<T> > lists = new ArrayList <>( initialCapacity );for ( int i = 1 ; i <= initialCapacity ; i++ ) {int limit = offset * i;if ( size < limit ){limit = size;}lists.add( list.subList( ( offset * ( i-1 ) ) , limit ) );}return lists;
}
/*** 根据查询条件查询* List<Long> ids = Arrays.asList(1L,2L,3L,4L,.....,3500L);* UserBO userBO = new UserBO();* userBO.setIds(ids);**/
List<List<Long>> selectList = ListHandleTool.split(userBO.getIds(), 900);
userBO.setSplitSize(selectList);
userExtMapper.query(userBO);
<if test="splitSize != null and splitSize.size() > 0">and (<foreach collection="splitSize" item="ids" separator="or">id in<foreach collection="ids" item="item" index="index" open="(" separator="," close=")">#{item}</foreach></foreach>)
</if>

2.直接在sql层进行分割

<if test="null!=splitSize">where (a.id in<foreach collection="splitSize" item="item" index="index" open="(" close=")" separator=","><if test="(index % 500) == 499">'-' ) or a.id in (</if>#{item}</foreach>)
</if>

这两种方法都可以解决in关键字超过1000的问题!
注:当时因为sit和uat测试库数据量太小导致没有发现这个问题,到生产芭比Q了,苦逼…

sql in关键字使用长度超过1000问题处理相关推荐

  1. oracle的in的值超过3000,处理 Oracle SQL in 超过1000 的解决方案

    http://www.cnblogs.com/hoojo/archive/2012/08/31/2665396.html hoojo的这篇博文里面,介绍了处理Oracle SQL in超过1000的解 ...

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

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

  3. 动态SQL字符长度超过8000

    动态SQL字符长度超过8000,我记得SQL SERVER 2008中用SP_EXECUTESQL打破了这个限制. 平常用动态SQL,可能都会用EXEC(),但是有限制,就是8000字符串长度.自从S ...

  4. sqlserver sp_executesql 动态SQL字符长度超过8000

    动态SQL字符长度超过8000,我记得SQL SERVER 2005中用SP_EXECUTESQL打破了这个限制. 平常用动态SQL,可能都会用EXEC(),但是有限制,就是8000字符串长度.自从S ...

  5. sql查询in条件超过1000条解决方案

    一. 背景: 小熙最近做的数据检索比较大,其中会使用到,in的条件会有超过1000条.但是in所支持的条件数量最多只有1000,那怎么办呢,后来小熙采取了分区检索,完成了. 二. 引入依赖: 引入ap ...

  6. Oracle1401和1438,Oracle SQL in 超过1000的解决方案

    起因: 代码程序由于设计问题,采用了效率不太高的oracle 的in语句,当条件超过1000之后oracle会抛出ora-01795: 经过: 1,oracle中如果非要用in作为条件的话,超过100 ...

  7. Oracle数据库中IN参数个数超过1000的问题

    问题描述:Oracle数据库中IN参数个数超过1000 遇到这种情况,想快速解决,数据库有 exists 关键字的话,可以用exists来代替 in 关键字. 数据库解决方法:可以拆分sql用 whe ...

  8. 如何解决请求URL长度超过配置的maxurlLength值问题

    当我们批量请求的数据太多时,会出现请求的url长度超过配置maxurllength值的问题(比如一次性操作1000条数据) 1.问题描述: 我在进行批量选择单据进行发送时,出现这个问题(批量500条) ...

  9. Oracle数据库查询用 where in 查询的项超过1000条的解决方案

    众所周知,如果我们的用SQL查询语句时,如果用where in带的参数超过1000条的话,oracle是会报错的. 因为项目中遇到这样的问题,所以找到了接下来我要说的这个办法. 因为用的地方很多,所以 ...

  10. 关于ORACLE 语句中,IN 超过1000个的解决方法

    在ORACLE SELECT 语句中 IN 的数据如果超过 1000,就会出错,解决方法也很简单,以C#代码为例: 1.先写一个方法,接收2个参数 参数1:接收 IN里面的数据,如:'a1','a2' ...

最新文章

  1. blast程序 介绍 简介
  2. Android-JNINDK(一)入门
  3. 无法找到脚本库错误解决过程
  4. python列表使用技巧与方法_Python列表的相关操作与方法
  5. Js组件layer的使用
  6. Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数)...
  7. MSP430程序库二UART异步串口
  8. java虚拟机时区_转:jvm设置时区问题
  9. 运算符优先级(图表)
  10. 电脑罗盘时钟html怎么设置成桌面,抖音时钟屏保怎么设置 罗盘时钟屏保设置方法...
  11. come的喂abc是什么梗
  12. 黑盒测试与白盒测试的区别
  13. element-UI 图标点击切换
  14. 邮箱发送材料服务器连接错误,发送邮件常见的错误和解决方法
  15. 头痛的apk卡顿,我该从哪些方面进行优化?带你了解常见方案
  16. HTML,JS与CSS
  17. Python3爬取国家统计局官网2019年全国所有城市(2020年更新)
  18. consistent hash
  19. 来给罗永浩和王自如打个分(下)
  20. typeScript 技术胖 笔记 下

热门文章

  1. oracle 新增配额,Oracle 用户配额
  2. linux使用磁盘配额,linux磁盘配额使用
  3. 微信群打卡小程序_微信群不好管理?这几款小程序帮你管理微信群
  4. 美国专利申请策略整理
  5. ps批量修改名片文字_教你用PS设计漂亮的名片
  6. 小程序跳转至企业微信客服wx.openCustomerServiceChat
  7. LittleVGL移植到STM32
  8. MybatisPlus中@TableField注解的使用详解
  9. 图形化开发(五)041-Three.js之Camera相机——target焦点和lookAt()方法、OrthographicCamera正交相机、PerspectiveCamera透视相机、相机插件
  10. 在计算机上OF键开机键,电脑开机时出现英文字母串需要按回车键才能继