【Oracle报错】ORA-01795: 列表中的最大表达式数为 1000 问题解决(使用JDK8的 stream 实现)
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 实现)相关推荐
- oracle 表达式1000,oracle环境下占用编号的方法报语法错误:ORA-01795: 列表中的最大表达式数为 1000...
oracle 环境下,调用方法NumberCodeGenerateManager.OcuppyModelNumberCodesAfterSaved(ObjectID, modelID, ds)进行编号 ...
- 《转》IN 查询时出现ORA-01795:列表中的最大表达式数为1000
问题描述: SQL进行IN查询时出现:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000 解决办法: 问题原因是:SQL进行IN查询时,IN中的数据量 ...
- ORA-01795: 列表中的最大表达式数为 1000
1.美图 2.报错 ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-01795: 列表中的最大表达式 ...
- 【MybatisPlus】ORA-01795 列表中的最大表达式数为1000
文章目录 特别声明 问题 业务分析 解决方案 方案1 循环更新 方案2 拆分in表达式 特别声明 以下代码纯楼主手打,有错误地方还请谅解,看思路就行. 问题 在使用MybatisPlus过程中,报错O ...
- ORA-01795: 列表中的最大表达式数为1000的解决方法
ORA-01795: 列表中的最大表达式数为1000的解决方法 参考文章: (1)ORA-01795: 列表中的最大表达式数为1000的解决方法 (2)https://www.cnblogs.com/ ...
- SQL Server报错:选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中...
聚合函数:聚合函数就是对一组值进行计算后返回单个值. 包括: COUNT(统计函数): COUNT_BIG(统计函数): SUM(求和函数): AVG(求平均值函数): MAX(最大值函数): MIN ...
- SQL Server报错:选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
聚合函数:聚合函数就是对一组值进行计算后返回单个值. 包括: COUNT(统计函数): COUNT_BIG(统计函数): SUM(求和函数): AVG(求平均值函数): MAX(最大值函数): MIN ...
- oracle 报错总结
ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常. ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 OR ...
- 【数据库】报错ora 12154 解决方法
Oracle报错 ora 12154 解决办法: 1.确认服务器监听正确打开: 2.确认别名前无空格.
最新文章
- 数据结构:O(nlogn)算法
- 。。。。。。想不通的ADO.NET。
- QT接收Linux内核,嵌入式linux上QT标准键盘输入的实现
- 作为我的第一篇csdn博客吧
- 最常用计算机机箱,电脑机箱的常用材质是什么?
- 437. 路径总和 III
- Java一个月学到springboot_Java基础学习路线之SpringBoot入门
- OpenCV 填充多边形 fillConvexPoly 和 fillPoly
- 75道常见AI面试题,看看你的知识盲点在哪?(附解析,包括机器学习、深度学习、苹果Google面试等)...
- WPF+prism框架实战源码和展示
- 【项目总结】中国大学生计算机设计(机械制造暨政治正确)大赛
- Vue自定义组件之时间跨度选择器
- chrony配置外部时钟源后stratum=16
- 微信小程序云开发学习指南(一)
- mysql 介绍 怎么下载 驱动jar包 各种细节问题大详解
- 实现对文件夹进行加密
- centos安装matlab2018的步骤(基本是借鉴的但是会有些自己的解释及补充)
- qt ini文件的读、写、删除
- java计算机毕业设计springboot+vue足球联赛管理系统
- 大陆ARS-408XX毫米波雷达
热门文章
- 大数据技术之Stome 概念
- Android UI开发第三十三篇——Navigation Drawer For Android API 7
- delphi DLL动态链接库
- 控制好你的 Wordpress 侧边栏
- Silverlight中调用WebService-发送邮件测试实例
- [转]C#中得到程序当前工作目录和执行目录的一些方法
- python类中的函数_python类中的函数问题
- android微信小程序自动填表_微信小程序自动回复用户消息
- js 只准输入数字_js验证如何限制文本框只能输入数字
- java商城_商城系统常见开发语言及特点分享