Oracle中IN参数个数超过1000的解决方案

Oracle中IN参数个数超过1000的解决方案,求大神指教!
在oracle中,使用in方法查询记录的时候,如果in后面的参数个数超过1000个,那么会发生错误,JDBC会抛出“java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000”这个异常。比如执行select * from table where id in (1, 2, …, 1000, 1001, …..,1999)时。
在网上搜了一下,解决方案都是将参数分段,即select * from table where id in (1, 2, …, 1000) or id in(1001, ….., 1999)。
但是这种方式感觉效率太低,当参数特别多的时候可能非常慢。
请教各位大神,有没有其他的解决方案可以解决这个问题?
——解决思路-———————
引用:

改SQL,参数太多了,只有想其他办法
比如:

select *
  from table
 where id in (1, 2, .. ., 1000)
union all
select *
  from table
 where id in (1001, .... ., 1999)

——解决思路————-

select *
from table
where id in (
select 1 from dual
union all
select 2 from dual)

不过还是建议建临时表,把in里面的数据插入到临时表中,然后用临时表写条件查询
——解决思路———————-
引用:
请问临时表要怎么建呢?我是通过java 操作数据库的

就是建立一个表来存储传入参数,取数据的时候先从临时表中遍历取参数,然后再将取出的参数拿去作为条件用,
——解决思路———————-
把这 2000 个值写到一个临时表中,直接 in 一个子查询

select * from t where id in (select id from temp)

——解决思路———————-
引用:
把这 2000 个值写到一个临时表中,直接 in 一个子查询

select * from t where id in (select id from temp)

赞同。。
——解决思路———————-
引用:
先感谢一下楼上各位!确实可以用这种方式解决
再请教一下,怎么插入临时表效率更高?一条一条插肯定是很慢的

插入的话本身应该是很快的,虽然条数很多,但是时间也不会很长
如果还嫌慢的话可以插入是加上append参数,这样不用写日志,直接写入数据库
insert /+append/ into

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值