Oracle SQL in 超過1000 的解決方案


GPS平台、網站建設、軟件開發、系統運維,找森大網絡科技!
https://cnsendnet.taobao.com
來自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=1979

 

處理oracle sql 語句in子句中(where id in (1, 2, ..., 1000, 1001)),如果子句中超過1000項就會報錯。
這主要是oracle考慮性能問題做的限制。如果要解決次問題,可以用 where id (1, 2, ..., 1000) or id (1001, ...)

/**

 * <b>function:</b> 處理oracle sql 語句in子句中(where id in (1, 2, ..., 1000, 1001)),

 * 如果子句中超過1000項就會報錯。

 * 這主要是oracle考慮性能問題做的限制。

 * 如果要解決次問題,可以用 where id (1, 2, ..., 1000) or id (1001, ...)

 * @author hoojo

 * @createDate 2012-8-31 下午02:36:03

 * @param ids in語句中的集合對象

 * @param count in語句中出現的條件個數

 * @param field in語句對應的數據庫查詢字段

 * @return 返回 field in (...) or field in (...) 字符串

 */

private String getOracleSQLIn(List<?> ids, int count, String field) {

    count = Math.min(count, 1000);

    int len = ids.size();

    int size = len % count;

    if (size == 0) {

        size = len / count;

    } else {

        size = (len / count) + 1;

    }

    StringBuilder builder = new StringBuilder();

    for (int i = 0; i < size; i++) {

        int fromIndex = i * count;

        int toIndex = Math.min(fromIndex + count, len);

        //System.out.println(ids.subList(fromIndex, toIndex));

        String productId = StringUtils.defaultIfEmpty(StringUtils.join(ids.subList(fromIndex, toIndex), "','"), "");

        if (i != 0) {

            builder.append(" or ");

        }

        builder.append(field).append(" in ('").append(productId).append("')");

    }

   

    return StringUtils.defaultIfEmpty(builder.toString(), field + " in ('')");

}


版權所有,轉載請注明出處 本文出自: 

 

GPS平台、網站建設、軟件開發、系統運維,找森大網絡科技!
https://cnsendnet.taobao.com
來自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=1979


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM