我正在使用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已经有类似的东西。
所有内容都必须最后使用JDBC API ...并且100
列表的限制为SELECT
。任何大于此值的值都不能保证数据库支持。您已经达到了Oracle的极限,但也可能是其他一些供应商。
在这方面,您真的无能为力。
在另一个领域,破解该解决方案,您可以:
IN
子句拆分为几个OR
的块(取决于块的大小,您可以选择100
或1000
,因为您知道这是您要达到的限制)IN
子句中使用子查询