• 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

  • 相关阅读:
    Centos7 定时任务
    Linux启动配置文件和运行等级runlevel
    Linux 网卡命名规则
    将博客搬至CSDN
    Lua调用C++动态链接库.so
    使用shell脚本执行批量mongosh语句
    TCP和UDP详解
    经受时延的确认(Delay ACK)
    18张图带你了解衡量网络性能的四大指标:带宽、时延、抖动、丢包
    TCP学习
  • 原文地址:https://www.cnblogs.com/cnsend/p/15463496.html
Copyright © 2020-2023  润新知