in关键字中参数超过最⼤值的解决⽅法前台页⾯查询时报错
parameter是什么意思啊定位到具体sql,放到PL SQL中查询
也就是in关键字默认参数数量⼤于1000时,就会报错
解决⽅法:
/**
*@Description: sql查询中使⽤in关键字时参数数量⼤于900则分段查询
*@param1: in中参数列表LIST
*@param2: 需要查询的字段
*@author: V_US9Y3S
*@date: 2020-7-6
*/
public static String getInParameter(List<String> list, String parameter){
if(!list.isEmpty()){
List<String> setList =new ArrayList<String>(0);
Set set =new HashSet();
StringBuffer stringBuffer =new StringBuffer();
for(int i =1; i <= list.size(); i++){
set.add("'"+ (i -1)+"'");
if(i %900==0){// 900为阈值
setList.add(org.apachemons.lang.StringUtils.join(set.iterator(),","));
set.clear();
}
}
if(!set.isEmpty()){
setList.add(org.apachemons.lang.StringUtils.join(set.iterator(),","));
}
stringBuffer.(0));
for(int j =1; j < setList.size(); j++){
stringBuffer.append(") or "+ parameter +" in (");
stringBuffer.(j));
}
String();
}else{
return"''";
}
}
// idList: [308989171, 309365293, 309259039]
String sql1TaskId = InParameter(idList,"B.TASK_ID");
// sql1TaskId: '309365293','308989171','309259039'
sql1.append(" AND (B.TASK_ID IN ("+sql1TaskId+") )");
/
/ 上⾯表达式中,如果idList的⼤⼩⼤于900,则超过900的部分会⽤'or'的⽅式与900前相连
这⾥要注意,使⽤了 “or” 关键字时,最好⽤括号括起两边sql(另⼀篇⽂章⾥有)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。