如何在jdbcTemplate spring-boot中传递非常长的列表

问题描述 投票:0回答:1

我正在使用oracle数据源,该数据源在一个查询中不允许超过1000条记录。

我的idList包含10K或更多,这将是动态的

我的单元测试是

@Test
    public void testLongListParameter(){
        String QUERY = "select value from sample_table where id in (:ids)"; 
        NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource());
        Map idMap = Collections.singletonMap("ids", idList);
        namedParameterJdbcTemplate.query(QUERY, idMap, new CustomRowMapper());

    }

当我运行它时,我得到ORA-01795: maximum number of expressions in a list is 1000

所以问题是我的争论超过了Oracle的限制。要解决此问题,我必须编写我的自定义查询生成器,还是spring已经有类似的东西。

oracle spring-boot spring-jdbc jdbctemplate
1个回答
0
投票

所有内容都必须最后使用JDBC API ...并且100列表的限制为SELECT。任何大于此值的值都不能保证数据库支持。您已经达到了Oracle的极限,但也可能是其他一些供应商。

在这方面,您真的无能为力。

在另一个领域,破解该解决方案,您可以:

  1. IN子句拆分为几个OR的块(取决于块的大小,您可以选择1001000,因为您知道这是您要达到的限制)
  2. 将数据集插入临时表,然后在IN子句中使用子查询
© www.soinside.com 2019 - 2024. All rights reserved.