zoukankan      html  css  js  c++  java
  • 对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


  • 相关阅读:
    函数式编程与命令式编程的学习难度比较
    Swfit4.0中JSON与模型原生互转(JSONEncoder/JSONDecoder的使用)
    元类型与类型的区别
    Swift
    swift类型操作规范
    PHP实现执行定时任务的几种思路详解
    基于ThinkPHP与阿里大于的PHP短信验证功能
    laravel中将session由文件保存改为数据库保存
    laravel5.*安装使用Redis以及解决Class 'PredisClient' not found和Fatal error: Non-static method Redis::set() cannot be called statically错误
    Python基础知识汇总
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3162983.html
Copyright © 2011-2022 走看看