对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)和生成表达式,通过这两 ...
随机推荐
- HDOJ 2442 -bricks 状态压缩DP 一直TLE.打表过的..
有5个砖块..加上一个空着不放..那么有6种状态..所以很明显的可以用6进制的状态DP... 不过这么做..我觉得我已经能优化的都优化了...还是超时..一看数据范围是100*6..打表先AC了.. ...
- PreferenceActivity使用示例
MainActivity如下: package cn.testpreferenceactivity; import android.content.SharedPreferences; import ...
- TPL异步并行编程之取消任务
TPL异步并行编程之简单使用 在上篇随笔里面说明了Task的使用,仅仅是简单使用,有时候把一个任务交给Task去执行,但是呢还是要管理下,比如说:我要叫这个任务停止了,不做了,任务取消了,或者超时了 ...
- Ceph与GlusterFS等等(80篇博客)
http://blog.csdn.net/liuben/article/category/373751
- C++ 载入dll
1.新建一个项目生成dll 首先我们新建一个项目生成一个Dynamic Library(动态链接库) dll 里面非常简单,只有一个add方法.等下我们就要在其他项目里尝试载入这个dll,调用里面的这 ...
- Swift - 使用EventKit获取系统日历事件,添加事件
通过EventKit可以对iOS日历事件进行读取,添加等操作.但网上找到的都是使用Objective-C来编写的. 下面提供一个Swift版的样例,演示如何添加一个事件以及获取所有的事件列表. 1 2 ...
- ZOJ 1859 Matrix Searching(二维线段树)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1859 Matrix Searching Time Limit: 10 Seco ...
- thinkPHP 输出及其模板调用(三)
原文:thinkPHP 输出及其模板调用(三) ThinkPHP 的输出(重点) a.通过 echo 等PHP原生的输出方式在页面中输出 b.通过display方法输出(thinkphp\Home\L ...
- tmpfs(/dev/shm)
tmpfs是一种基于内存的文件系统,它和虚拟磁盘ramdisk比较类似像,但不完全相同,和ramdisk一样,tmpfs可以使用RAM,但它也可以使用swap分区来存储.而且传统的ramdisk是个块 ...
- 数字雨Shopex 4.8.5 SQL Injection Exp
# -*- coding:utf-8 -* #Author:MXi4oyu #Email:798033502@qq.com #Shopex 4.8.5 SQL Injection Exp #转载请说明 ...