对ORA-01795: 列表中的最大表达式数为 1000的处理(算法:计算数量及切割)
/**
* @category
* 原:strIDs in ( 100001,100002,100003,....................,110001,120001,130001,140001,150001)
* 转后:( strIds in (100001,100002,100003) or strIds in (....,.....,.....) or strIds in (130001,140001,150001))
* @see 处理strIDs查找的数量超过1000时进行分组处理
* @param orignal 括号内的IDs字符串
* @param spiltNum 分割后的小组内的数量
* @param flag 分割符号(仅限于单字符,格式如上)
* @param titlestrIDs名称
*/
public static String dealQuerySize(String orignal,String flag,String title,int spiltNum){
//返回无需处理的情况
if(StringUtil.isEmpty(orignal) || StringUtil.isEmpty(flag)){
return orignal;
}
int IDSNum = orignal.length()-orignal.replaceAll(flag,"").length()+1;//统计原字符串中ID的数量
//按1组处理的情况
if(IDSNum <=1000 && spiltNum > IDSNum){
return packageQueryStyle(orignal,title);
}
//按照数量分组
if(spiltNum<=0){
spiltNum = 1;
}
//ID分组
StringBuffer totalBuilder = new StringBuffer();
Pattern p = Pattern.compile("([0-9 ]+,){"+spiltNum+"}");//编译模式
Matcher m = p.matcher(orignal);//产生匹配结果
while(m.find()){//结果查找
String matchersIDS = m.group();
String apartIDS = " or " + packageQueryStyle(matchersIDS.substring(0, matchersIDS.length()-1),title);
m.appendReplacement(totalBuilder, apartIDS);
}
StringBuffer lastIDS = m.appendTail(new StringBuffer());
totalBuilder.append(" or "+packageQueryStyle(lastIDS.toString(),title));
return "(" +totalBuilder.toString().replaceFirst("or", "") + ")";
}
private static String packageQueryStyle(String str,String title){
return title+" in ("+str+")";
}
//统计数量的2种方式,这里只统计符号,需要的话自己+1
对ORA-01795: 列表中的最大表达式数为 1000的处理(算法:计算数量及切割)的更多相关文章
- Sql语句报ORA-01795: 列表中的最大表达式数为 1000
错误信息:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000,错误信息如下: serviceid是:work -------------other W ...
- IN 查询时出现ORA-01795:列表中的最大表达式数为1000解决方法
问题描写叙述: SQL进行IN查询时出现:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000 解决的方法: 问题原因是:SQL进行IN查询时.IN中的 ...
- java jdbc oracle ORA-01795: 列表中的最大表达式数为 1000
在操作SQL中存在In的数量如果超过1000条会提示 ORA-01795: 列表中的最大表达式数为 1000 归纳有几种方式出现的: 第一种是:我在上一个 [jdbc 同时执行 查询和删除操]作中 ...
- ORA-01795: 列表中的最大表达式数为1000的解决方法
IN中的数据量不能超过1000条. 解决方案:把条件分成多个少于1000的IN即: DELETEFROMT_MM_SECTION_SITE_UPDATEWHERE T.T_MM_SECTION_SL_ ...
- ORA-01795: 列表中的最大表达式数为 1000
系统报出一SQL异常,内容如下: java.sql.SQLException: ORA-01795: maximum number of expressions in a list is 1000 找 ...
- java.sql.SQLSyntaxErrorException: ORA-01795: 列表中的最大表达式数为 1000
后台报了一些异常日志,查阅后发现在 oracle 数据库中使用 in 关键字条件不能超过 1000 个,当时写查询语句时没有关注这个问题 总结一下解决方法 1.分多次查询,对查询要求不高的话.把入参的 ...
- 将Lambda表达式作为参数传递并解析-在构造函数参数列表中使用Lambda表达式
public class DemoClass { /// <summary> /// 通过Lambda表达式,在构造函数中赋初始值 /// </summary> /// < ...
- 当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。
当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式.比如 select * from T_Employee where FNumber not in ( select top 5* ...
- python 中的列表解析和生成表达式 - 转
优雅.清晰和务实都是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析( List comprehensions)和生成表达式,通过这两 ...
随机推荐
- VC GDI双缓冲机制绘图防屏幕闪烁实现步骤
在OnDraw(CDC* pDC) 中添加如下代码 CDC MemDC; //首先定义一个显示设备对象 CBitmap MemBitmap;//定义一个位图对象 //随后建立与屏幕显示兼容的内存显示设 ...
- 与众不同 windows phone (11) - Background Task(后台任务)之警报(Alarm)和提醒(Reminder)
原文:与众不同 windows phone (11) - Background Task(后台任务)之警报(Alarm)和提醒(Reminder) [索引页][源码下载] 与众不同 windows p ...
- J2EE开发框架搭建(2) - springmvc4 + spring4 + hibernate4 整合
1. 打开hqhop-framework-parent项目下的pom.xml文件.加入springmvc4 , spring4 , hibernate4 ,以及数据源druid的依赖包,插件,依赖包版 ...
- Java使用javax.mail.jar发送邮件并同意发送附件
因为Java在开发网页上占有绝大优势.所以作为web端的领军人物,譬如发送短信和发送邮件这些就成了必定,网络安全一再安全我们须要把账号的安全级别提到更高.因此这些对于开发者也就成了必须掌握的技能!我一 ...
- cocos2dX 事件之触摸事件和触摸事件集合
今天, 我们来学习cocos2dX里面的触摸事件与触摸事件合集, 如今的手机游戏交互基本上都是通过触摸交互的, 所以大家明确这节的重要性了吧, 本节篇幅比較大, 所以我就不扯闲话了 先来看看经常使用函 ...
- hdu1075What Are You Talking About (字典树)
Problem Description Ignatius is so lucky that he met a Martian yesterday. But he didn't know the lan ...
- JS跑马灯
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEA ...
- 主流JavaScript框架(Dojo、Google Closure、jQuery、Prototype、Mootools和YUI)的分析和对比
本文主要选取了目前比较流行的JavaScript框架Dojo.Google Closure.jQuery.Prototype.Mootools和YUI进行对比,主要是根据网上的资料整理而成,希望可以供 ...
- C Coding Standard
1 共同 Rule 1 编译的Warnings不能被忽略掉 Rule 2 在已有Code或者三方的code基础上的改动,同意使用原来的coding standard Rule 3 假设同意C和C++都 ...
- 轻松学习之Linux教程一 ubuntu14.04+windows双系统安装
本系列文章由@uid=hpw" style="color:rgb(255,0,0)">超人爱因斯坦出品.转载请注明出处. 文章链接:http:// ...