1. 问题说明

-- 类似这种 SQL
SELECT * FROM tableName WHERE tableField IN ('','')

姑且不说这种 SQL 的效率和可优化和替代性,就当前问题在 MySQL、Greenplum 数据库没有 1000 的限制。

2. 解决方法

解决的方法较多,这里使用的是 JDK8 的 stream 方法,代码如下:

/*** 通过 List 数据获取 inStr 字符串(超过 1000 个改成 or in)** @param list List对象* @return inStr 字符串*/private String getInStrByList(List<Map<String, Object>> list) {int listSize = list.size();List<Map<String, Object>> tempRecordList;// 分段大小(这个数值可以写成参数传递过来)int lengthControl = 1000;List<String> inStrSegmentList = new ArrayList<>();if (listSize <= lengthControl) {return list.stream().map(oneMap-> MapUtils.getString(oneMap, "fieldName")).collect(Collectors.joining("','", " table_field in ( '", "' ) "));} else {// 进行分段double number = listSize * 1.0 / lengthControl;int n = ((Double) Math.ceil(number)).intValue();for (int i = 0; i < n; i++) {int iLength = i * lengthControl;int end = lengthControl * (i + 1);if (end > listSize) {end = listSize;}tempRecordList = list.subList(iLength, end);String inStrSegment = tempRecordList.stream().map(oneMap -> MapUtils.getString(oneMap, "fieldName")).collect(Collectors.joining("','", "'", "'"));inStrSegmentList.add(inStrSegment);}}return inStrSegmentList.stream().collect(Collectors.joining(" ) or table_field in ( "," ( table_field in ( "," ) )"));}

字符串的使用举例:

 <select id="geDataList" parameterType="java.util.Map" resultType="java.util.Map">SELECT * FROM table_name<where><if test="inStr != null and inStr != ''">AND ${inStr}</if></where></select>

【Oracle报错】ORA-01795: 列表中的最大表达式数为 1000 问题解决(使用JDK8的 stream 实现)相关推荐

  1. oracle 表达式1000,oracle环境下占用编号的方法报语法错误:ORA-01795: 列表中的最大表达式数为 1000...

    oracle 环境下,调用方法NumberCodeGenerateManager.OcuppyModelNumberCodesAfterSaved(ObjectID, modelID, ds)进行编号 ...

  2. 《转》IN 查询时出现ORA-01795:列表中的最大表达式数为1000

    问题描述: SQL进行IN查询时出现:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000 解决办法: 问题原因是:SQL进行IN查询时,IN中的数据量 ...

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

    1.美图 2.报错 ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-01795: 列表中的最大表达式 ...

  4. 【MybatisPlus】ORA-01795 列表中的最大表达式数为1000

    文章目录 特别声明 问题 业务分析 解决方案 方案1 循环更新 方案2 拆分in表达式 特别声明 以下代码纯楼主手打,有错误地方还请谅解,看思路就行. 问题 在使用MybatisPlus过程中,报错O ...

  5. ORA-01795: 列表中的最大表达式数为1000的解决方法

    ORA-01795: 列表中的最大表达式数为1000的解决方法 参考文章: (1)ORA-01795: 列表中的最大表达式数为1000的解决方法 (2)https://www.cnblogs.com/ ...

  6. SQL Server报错:选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中...

    聚合函数:聚合函数就是对一组值进行计算后返回单个值. 包括: COUNT(统计函数): COUNT_BIG(统计函数): SUM(求和函数): AVG(求平均值函数): MAX(最大值函数): MIN ...

  7. SQL Server报错:选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中

    聚合函数:聚合函数就是对一组值进行计算后返回单个值. 包括: COUNT(统计函数): COUNT_BIG(统计函数): SUM(求和函数): AVG(求平均值函数): MAX(最大值函数): MIN ...

  8. oracle 报错总结

    ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常. ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 OR ...

  9. 【数据库】报错ora 12154 解决方法

    Oracle报错 ora 12154 解决办法: 1.确认服务器监听正确打开: 2.确认别名前无空格.

最新文章

  1. 数据结构:O(nlogn)算法
  2. 。。。。。。想不通的ADO.NET。
  3. QT接收Linux内核,嵌入式linux上QT标准键盘输入的实现
  4. 作为我的第一篇csdn博客吧
  5. 最常用计算机机箱,电脑机箱的常用材质是什么?
  6. 437. 路径总和 III
  7. Java一个月学到springboot_Java基础学习路线之SpringBoot入门
  8. OpenCV 填充多边形 fillConvexPoly 和 fillPoly
  9. 75道常见AI面试题,看看你的知识盲点在哪?(附解析,包括机器学习、深度学习、苹果Google面试等)...
  10. WPF+prism框架实战源码和展示
  11. 【项目总结】中国大学生计算机设计(机械制造暨政治正确)大赛
  12. Vue自定义组件之时间跨度选择器
  13. chrony配置外部时钟源后stratum=16
  14. 微信小程序云开发学习指南(一)
  15. mysql 介绍 怎么下载 驱动jar包 各种细节问题大详解
  16. 实现对文件夹进行加密
  17. centos安装matlab2018的步骤(基本是借鉴的但是会有些自己的解释及补充)
  18. qt ini文件的读、写、删除
  19. java计算机毕业设计springboot+vue足球联赛管理系统
  20. 大陆ARS-408XX毫米波雷达

热门文章

  1. 大数据技术之Stome 概念
  2. Android UI开发第三十三篇——Navigation Drawer For Android API 7
  3. delphi DLL动态链接库
  4. 控制好你的 Wordpress 侧边栏
  5. Silverlight中调用WebService-发送邮件测试实例
  6. [转]C#中得到程序当前工作目录和执行目录的一些方法
  7. python类中的函数_python类中的函数问题
  8. android微信小程序自动填表_微信小程序自动回复用户消息
  9. js 只准输入数字_js验证如何限制文本框只能输入数字
  10. java商城_商城系统常见开发语言及特点分享