| 查询出来的结果>1000条 select vl.UNIT_CODEfrom VC_LEVEL vl
 where vl.UNIT_TYPE = 0
 and vl.VALID_STATUS = 1
 and vl.LEVEL_NO <= 3
 start with vl.ID_VC_LEVEL = 694
 connect by prior vl.ID_VC_LEVEL = vl.PARENT_ORG_ID);
 放进一个list<string>  aa 里面   select doc.id_vc_doc_version_info,doc.doc_ver_code,
 doc.doc_ver_name,
 doc.org_code,
 doc.status
 from vc_doc_version_info doc
 where 1 = 1 and doc.status = '1'
 and doc.id_vc_doc_type='1'
 and exists (select 1
 from vc_doc_rel_area area
 where area.id_vc_doc_version_info = doc.id_vc_doc_version_info
 and area.org_code in( aa )
 );
 解决方案  sb.append(" and exists(select 1 from VcDocRelArea area where area.idVcDocVersionInfo=doc.idVcDocVersionInfo " );// sb.append(" and area.orgCode in ( ");
 String[] strs1=orgCodeList.toArray(new String[orgCodeList.size()]);
  sb.append(createIdsInHqlAllowEmpty(strs1,"area.orgCode"));sb.append("))");
   工具类  public static String createIdsInHqlAllowEmpty(String[] ids, String propertyStr) {if(ids.length<=1000){
 String idStr = createIds4Hql(ids);
 StringBuffer hqlBuffer = new StringBuffer("");
 if (StringUtils.isNotEmpty(idStr)) {
 hqlBuffer.append(" and " + propertyStr + " in ").append(idStr);
 }
 return hqlBuffer.toString();
 }else{
 StringBuffer hqlBuffer = new StringBuffer("");
 hqlBuffer.append(" and ( ");
 int num = ids.length/1000;
 int remain = ids.length%1000;
 for(int i=0;i<=num;i++){
 String[] newIds = null;
 if(i!=num){
 newIds = Arrays.copyOfRange(ids, i*1000, (i+1)*1000);
 }else{
 newIds = Arrays.copyOfRange(ids, i*1000, i*1000+remain);
 }
 String idStr = createIds4Hql(newIds);
 if (StringUtils.isNotEmpty(idStr)) {
 if(i==0){
 hqlBuffer.append(propertyStr + " in ").append(idStr);
 }else{
 hqlBuffer.append(" or " + propertyStr + " in ").append(idStr);
 }
 }
 }
 hqlBuffer.append(")");
 return hqlBuffer.toString();
 }
 }
 public static String createIds4Hql(String[] ids) {
 StringBuffer idBuffer = new StringBuffer("");
 String idsHql = null;
 StringBuffer hqlBuffer = new StringBuffer("");
 if (ids!=null&&ids.length>0) {
 for (String id : ids) {
 idBuffer.append("'" + id + "',");
 }
 idsHql = StringUtils.substringBeforeLast(idBuffer.toString(), ",");
 hqlBuffer.append(" (").append(idsHql).append(")");
 }
 return hqlBuffer.toString();
 }
   oracle   数据库一种新发现的写法 这种写法超过1000条也不会报错 SELECT t.* FROM nbz_policy_main t WHERE (t.policyno , 1) in (('1',1),('1',1)); |