Oracle in 超过1000怎么办

也是用到了才知道,oracle in表达式参数支持最大上限1000个,是个头疼的问题,

解决思路:拆分成多个in表达式,每个表达式中参数不超过1000,网上有很多解决的实现方法可以参考,有些看不大懂,就自己写了一个,分享下:

 

private String getSubQuery(String riskIds){
		StringBuffer subQ = new StringBuffer();
		subQ.append("(");
		if(!"".equals(riskIds) && null != riskIds){
			String[] riskIDs = riskIds.split(", ");
			if(riskIDs.length>1000){
				for(int i=0;i<riskIDs.length;i++){
					if((i+1)%1000 == 0){
						String temp = subQ.substring(0, subQ.length()-1);
						subQ.delete(0, subQ.length());
						subQ.append(temp);
						subQ.append(") or cc.cntlKORInfo.korEntityId in (");
						subQ.append(riskIDs[i]+",");
					}else{
						subQ.append(riskIDs[i]+",");
					}
				}
				String temp = subQ.substring(0, subQ.length()-1);
				subQ.delete(0, subQ.length());
				subQ.append(temp);
				subQ.append(")");
			}else{
				subQ.append(riskIds);
				subQ.append(")");
			}
		}else{
			subQ.append(")");
		}
		
		return subQ.toString();
	}

 

传入参数是一个"1,2,3,4"形式的string,分隔符",";

其他的实现方法可以参考下:

http://www.blogjava.net/hoojo/archive/2012/08/31/386692.html

http://www.cnblogs.com/ttc/archive/2008/07/21/1247790.htm

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值