zoukankan      html  css  js  c++  java
  • [原著]java或者Js 代码逻辑来处理 突破 oracle sql “IN”长度的极限的问题

    注:本文出自:博主自己研究验证可行

     

    [原著]java或者Js  代码逻辑来处理  突破 oracle  sql “IN”长度的极限的问题

       在很多的时候 使用 select  *  from  tab_name t where  t.id in (1,2…………1000) ;  的固定方式来查询数据的时候。会有一种这个情况出现:

    则是 in 里面的内容 太长了; 而 oracle数据库支持的长度是 100个内容。

             那么对于这个情况该怎么办呢。其实是很简单的,in 本身就是  所有 内容的or查询。

             对于此的办法是:把in的里面的参数给拆分成很多个。

            具体实现如下:

    1:java 代码的实现:

      1  public List stapleToCzgkzxNew(DaoFactory daoFactory,String orgType, List lstSource ,List lstVo_jjfl) throws SQLException, Exception {
      2 
      3         List lstTarget = new ArrayList();
      4 
      5         try {
      6 			/**
      7 			 * 需要  进行  经济分类 辅助核算
      8 			 */
      9 			List lstIds_jjfl = new ArrayList();
     10 			//取出 集合中的 id
     11 			if(lstVo_jjfl.size()>0){
     12 				 Iterator itSource_jjfl = lstVo_jjfl.iterator();
     13 			     while (itSource_jjfl.hasNext()) {
     14 			         ZfpzVO vo = (ZfpzVO) itSource_jjfl.next();
     15 			         lstIds_jjfl.add(String.valueOf(vo.getGk_zfpz_id()));
     16 			     }
     17 		 //---start 20180315  新增 -------目的:提高生成数据执行速度,按照凭证号来查询数据。取消掉相同数据的合并问题---------------------    
     18 			//把  id  拼接成字符串      1,2,3,4,5,6
     19 	        int listLentgh=lstIds_jjfl.size();
     20 		    int intFalg=50;//in 里面包含值的阀值
     21 		    List  lsId=new ArrayList();//存放id字符串集合
     22 		    String stra="";
     23 		    for (int i=0;i<listLentgh;i++){
     24 				   if(i%intFalg == 0 && i != 0   ){
     25 					   lsId.add(stra);
     26 					   stra="";
     27 				   }
     28 				  if(i%intFalg == 0  ){
     29 					  stra = ""+lstIds_jjfl.get(i);
     30 				  }else{
     31 					  stra = stra+","+lstIds_jjfl.get(i);
     32 				  }
     33 				  if(i+1==listLentgh && ( listLentgh !=1 &&i%intFalg != 0)){
     34 					  lsId.add(stra);
     35 				  } else if(i+1==listLentgh &&  listLentgh  ==1 && i%intFalg == 0 ){
     36 					  lsId.add(stra);
     37 				  }
     38 		    }
     39 		  //---end 20180315  新增 ---------------------------- 
     40 
     41 
     42 		     //---start 20180315 修改 -------目的:提高生成数据执行速度---------------------       
     43 			  List Gkzfpz_jjflList =ZwvchCommonHelper.factory().getGkzfpz_jjflList(daoFactory, lsId,orgType);
     44 45 
     46 //下面是拼接 sql 的逻辑处理
     47 
     48 
     49     */
     50     public  List getGkzfpz_jjflList (DaoFactory daoFactory, List lstZfpzId,String orgType){
     51     	String  strSQL ="select  * from view_k3_zfzxz_zfpz v    WHERE 1 = 1   ";
     52 		List<Map<String, Object>>lstZfpz = new ArrayList();
     53 
     54     	try {
     55 
     56 			  if(lstZfpzId.size()>0) {
     57 				  strSQL += " AND ( ";
     58 	        	  for (int index=0 ;index <lstZfpzId.size();index ++) {
     59 	        		  if(index == 0){
     60 	        			  strSQL += "   v.id in ("+lstZfpzId.get(index)+")";
     61 	        		  }else {
     62 	        			  strSQL += " OR v.id in ("+lstZfpzId.get(index)+")";
     63 	        		  }
     64 
     65 	             }
     66 	               strSQL += ")";
     67 			  }
     68 			  log.info("_______国库支付中心账务:直接支付凭证  ___________strSQL="+strSQL);
     69     		  lstZfpz = daoFactory.getDao().getJdbcTemplate().queryForList(strSQL);
     70               for(int i=0;i<lstZfpz.size();i++){
     71               	lstZfpz.get(i).put("org_type",orgType);
     72               }
     73 			  log.info("_______国库支付中心账务:直接支付凭证  ___________查询结果="+lstZfpz.size()+";======:"+lstZfpz.toString()) ;
     74 
     75 		} catch (Exception e) {
     76 			e.printStackTrace();
     77 		}
     78     	 return lstZfpz;
     79     }
     80 


    2:使用JS 的逻辑处理

      1             var rows=[];  2 
      3 	   	rows = mainGrid.getSelections();
      5 		if(rows.length>0){
      6 			debugger;
      7                  var balance_type="";
      8               
     12                 var rowsLength=rows.length;
     13         	    var intFalg=30;//in 里面包含值的阀值
     14         	    var ids=[];//id拼接存放的合集
     15         	    var str_id="";
     16         	    for (var i=0;i<rowsLength;i++){
     17         		   var row =rows[i];
     18         		   if(i%intFalg == 0 && i != 0   ){
     19         			   ids.push(str_id);
     20         			   str_id="";
     21         		   }
     22         		  if(i%intFalg == 0  ){
     23         			  str_id = ""+row.id;
     24         		  }else{
     25         			  str_id = str_id+","+row.id;
     26         		  }
     27         		  if(i+1==rowsLength && ( rowsLength !=1 &&i%rowsLength != 0)){
     28         			  ids.push(str_id);
     29         		  } else if(i+1==rowsLength &&  rowsLength  ==1 && i%intFalg == 0 ){
     30         			  ids.push(str_id);
     31         		  }
     32         	     }
     33 34 
      








  • 相关阅读:
    k8s podpreset 参数注入
    python pipenv 包管理
    使用火狐浏览器访问双向认证的k8s api
    k8s api
    常用的排序算法的时间复杂度和空间复杂度
    flask 启动
    Redis系列-第四篇持久化与事务
    Redis系列-第五篇分布式锁与主从复制
    Redis系列-第六篇哨兵模式
    Docker系列-第一篇Docker简介
  • 原文地址:https://www.cnblogs.com/ios9/p/8580360.html
Copyright © 2011-2022 走看看