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,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 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|