当前位置: 首页 > 知识库问答 >
问题:

NamedParameterJdbcTemplate在子句中大于100或1000时不起作用

段干瑞
2023-03-14

我正在使用NamedParameterJdbcTemboard来运行我的查询。查询如下:

SELECT id, desc FROM tableA WHERE id IN (:custIds);

现在,我调用一个web服务,它返回一个ID列表。因此,我使用NamedParameterJdbcTemplate将ID列表映射到“客户ID”。然而,当ID列表达到1000多个时,我遇到了一个问题。我已经了解到,DB将无法处理包含100或1000个以上数据的IN。

由于我只能接收ID列表,您能否建议除了NamedParameterJdbcTemplate之外,最好使用什么?

共有1个答案

周宏伯
2023-03-14

在子句中,不能使用超过1000个条目。有以下几种解决方案

  • 使用内部查询来解决此问题。您可以创建一个临时表并在IN子句中使用它。

示例查询:

select id,desc from table_name where id in (select id from temp_table)
  • 使用多个由子句分隔的in子句将其拆分为1000个条目

示例查询:

select id,desc from table_name
  where
      id in (1,2,3,...1000)
  or
      id in (1001,1002,1003,...2000)
  or
      id in (2001,2002,...)
  • 或者使用union all(联合所有)而不是上述的子句,在子句中查询1000个条目

示例查询:

select id,desc from table_name where id in (1,2,3,4,...,1000)
union all
select id,desc from table_name where id in (1001,1002,...2000)
union all
select id,desc from table_name where id in (2001,2002,...)

阅读更多。。请参阅Oracle常见问题解答

 类似资料:
  • 问题内容: 我创建了一个包含3列的数据框:zip,lat,lng 我想选择zip = 00650的经纬度值 因此,我尝试使用: 但是它返回ArrayOutOfBound异常,因为它没有任何值。如果我删除where子句,它将运行良好。 有人可以解释我在做什么错吗? 更新: 数据框架构: 前10行是: 问题答案: 正如你可以在你的方案看是类型的,所以你的查询应该是这样的 更新: 如果您正在使用,则可以

  • 我使用该子句捕获项目上发生的所有异常,以自定义其行为。 在测试中,uri“upload.toftp”设置了一个不存在的连接,因此它们抛出了一个异常。测试仅启动上下文并等待消息插入队列“activeMQ:int.sendmail” 当我在Fuse上安装项目时,工作良好,但当我执行一个引发某种类型异常的测试用例时,就不工作了。 这是在激发异常时显示测试用例的日志。

  • 我正在使用spring将批处理记录插入数据库。但我得到了一个错误:java。sql。SQLException:无法在java之间转换。util。ArrayList和JAVA\u对象。你能帮帮我吗?我做错什么了 错误: 如果使用硬编码值: 或者当我只通过一个int时,它就起作用了。 请帮忙:)

  • 问题内容: 我注意到将CSS3 功能用作单位不能在最新版本的Chrome中使用。 在Chrome Developer工具中,带有的规则具有 删除线 ,并在其左侧的黄色三角形中带有感叹号。这表示无法识别该属性或值。 如何使它在现代浏览器中运行?因为它是一个值而不是一个属性,所以供应商前缀在哪里? 更新: 当我说它不起作用时,我的意思是Chrome开发工具在说它无法识别我的用法。我怎么知道它无法识别?

  • 我想执行sqlite查询: in子句中的值需要取自字符串数组: 以下是我的错误日志。 原因:Android。数据库sqlite。SQLiteException:接近“1”:语法错误(代码1):,编译时:从sku所在的books_表中选择book_id、book_code、ISBN、vol_no、brand、sku、title、price、lang、status(单打、5合1系列、儿童图书);在An

  • 当我尝试执行删除时,将设置为