众所周知,如果我们的用SQL查询语句时,如果用where in带的参数超过1000条的话,oracle是会报错的。

因为项目中遇到这样的问题,所以找到了接下来我要说的这个办法。 因为用的地方很多,所以我把这个封装成了一个方法。

        /// <summary>/// 获取查询条件超过1000个列表数据的SQL/// columnName In :list/// </summary>/// <param name="list">参数列表</param>/// <param name="columnName">字段名称</param>/// <param name="arguments">带出的参数</param>/// <returns>sql</returns>private string GetWhereIn(List<string> list, string columnName, out Dictionary<string, object> arguments){arguments = new Dictionary<string, object>();if (list == null || list.Count == 0) return string.Empty;var pageSizes = 1000;// 计算参数分页页数var totalPages = list.Count % pageSizes == 0 ?list.Count % pageSizes :list.Count % pageSizes + 1;var sqlResultContainer = new List<string>();for (var pageIndex = 0; pageIndex < totalPages; pageIndex++){var skipCount = pageIndex * pageSizes;var listGroup = list.Skip(skipCount).Take(totalPages).ToList();if (listGroup.Count == 0) continue;sqlResultContainer.Add($"{columnName} IN :p{pageIndex}");arguments.Add($"p{pageIndex}", listGroup);}var sqlResult = "(" + string.Join(" OR ", sqlResultContainer) + ")";return sqlResult;}

  只想SQL,我用的是Dapper. 所以调用这个方法后,返回的是个sql语句。用于拼接在where后面或者and后面等。 arguments是传值出来的,需要带如到dapper的传参中。

注意的是 argumens的类型是Dictionary<string,object> 第二个一定是要object,不然的话,dapper是会报错的。

转载于:https://www.cnblogs.com/saving/p/9967955.html

Oracle数据库查询用 where in 查询的项超过1000条的解决方案相关推荐

  1. 线性回归中oracle性质,66.Oracle数据库SQL开发之 高级查询——使用线性回归函数...

    66.Oracle数据库SQL开发之 高级查询--使用线性回归函数 线性回归函数可以用普通最小平方回归曲线拟合一组数值对.线性回归函数可用于聚合.串口或报表函数. 如下图1: 例如: store@PD ...

  2. oracle 窗口函数查询条件,62.Oracle数据库SQL开发之 高级查询——使用分析函数之窗口函数...

    62.Oracle数据库SQL开发之 高级查询--使用分析函数之窗口函数 窗口函数可以计算一定的记录范围内.一定值域内.或者一段时间内的累积和以及移动平均值.查询返回一组记录,称为结果集.窗口这个术语 ...

  3. oracle报表查询sql,63.Oracle数据库SQL开发之 高级查询——使用报表函数

    63.Oracle数据库SQL开发之 高级查询--使用报表函数 报表函数可用于执行跨越分组和组内分区的计算. 报表计算:SUM,AVG,MAX,MIN,COUNT,VARIANCE,STDDEV.可以 ...

  4. Oracle数据库中的多表查询

    经验查询: 在日后的开发之中,很多人都肯定要接触到许多新的数据库和数据表,那么在这种时候有两种做法: 做法一:新人做法,上来就直接输入以下的命令 select * from 表名称; 如果此时数据量较 ...

  5. Oracle数据库之一_多表查询

    Oracle数据库之一_多表查询 Oracle的查询是SQL语句的重点,在日常开发中,增删改查4项操作,查询占80%的工作量. Oracle的单表查询通常较简单,大多数时候,一个select * fr ...

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

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

  7. oracle数据库视图:定义、查询与更新 实践学习报告

    本篇博客分享SQL语言视图操作--详细实践学习报告(以截图方式展示) 软件:Oracle SQL Developer 目录 1.学生-课程数据库 2.视图 ①定义视图 ②查询视图 ③更新视图 ④视图的 ...

  8. oracle数据库多表联查并排序,oracle数据库之多表联接查询(一)

    --此文章可以作为sql脚本直接运行 /* 建表以及插入相关数据,为后面的查询做准备工作 */ --建学生信息表 create table studentinfo( stuid  int  prima ...

  9. 【Oracle数据库】关联、子查询

    关联.子查询 内连接 等值连接 范围链接(不等值连接) 自然连接 外连接 左连接 右连接 全连接 自连接 交叉连接(笛卡尔积) 子查询 联合查询 并集 交集 补集 模糊查询 in 内连接 等值连接 显 ...

最新文章

  1. 「WC2018」即时战略
  2. CentOS-7.2、7.5模板机制作
  3. 第13章 Kotlin 集成 SpringBoot 服务端开发(1)
  4. 阿里数据产品经理工作(总结篇):数据PD,做牛做马
  5. php mysql简单留言本_php+mysql写的简单留言本实例代码
  6. 784. Letter Case Permutation
  7. 拼智商,谷歌、苹果、微软、亚马逊的AI助手谁赢了?有些结果没料到
  8. 使用eclipse开发web需要搭建什么环境
  9. 时间序列模型之——prophet
  10. 浏览器“四巨头”首度合作 解决网页适配问题
  11. 怎么单选_第一届化妆品分类大赛丨用过的化妆刷、过期的口红…该怎么扔
  12. 不看后悔!史上最全面的电力系统150+90问!——电力巡检篇
  13. python分析pcap文件_Python读取pcap文件
  14. CentOS换源、linux配置IP、腾讯云SHH秘钥、公钥
  15. Java8 Stream流 - 高效快速的处理集合
  16. 关于STM32的裸机多任务多线程心得
  17. 雨水情测报系统+智慧水库大坝安全监测系统
  18. BINARY_INTEGER和INTEGER的区别
  19. php substr 中文_PHP mb_substr():截取中文字符串
  20. 有关vite的别名配置后找不到模块的问题

热门文章

  1. Visual paradigm社区版下载及中文菜单的设置
  2. 如何实现数组和 List 之间的转换?
  3. 计算机部分选择怎么操作,计算机基础试题选择题部分
  4. linux命令编写四位数密码本,grub-crypt命令 – 对口令进行加密
  5. java ioexception异常_12. Java IO: 异常处理
  6. 系统开发基础:UML相关知识笔记
  7. c++大文本比较_Excel – 将文本转换为数值,第二种方法会的请举左手
  8. java 常量 内存分配_Java内存分配之堆、栈和常量池
  9. vba交付图表设计_您是在为交付目的而“设计”吗?
  10. figma下载_通过构建7个通用UI动画来掌握Figma中的动画