前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决Oracle使用IN 不能超过1000问题

解决Oracle使用IN 不能超过1000问题

作者头像
chenchenchen
发布2021-09-06 14:28:33
4.4K0
发布2021-09-06 14:28:33
举报
文章被收录于专栏:chenchenchenchenchenchen

在oracle中,使用in方法查询记录的时候,如果in后面的参数个数超过1000个,那么会发生错误,JDBC会抛出“java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000”这个异常。

解决办法

使用or/union连接

分割SQL语句为select a from b where c in(,) or c in (,) or c in (,),…

或者

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

保证每个括号内个数不超过一千,就可以。执行效率可能比较低下。

使用元组

思络:即把in条件,拼接成元组的形式,如id in (1,2,3),改为 (1,id) in((1,1),(1,2),(1,3))即可。

查询中间表

如果IN里面的数据是从别的表取的话,可以直接这样编写sql语句

select * from table_1 where column_1 in ( select column_2 from table_2 ,… )

建立一个中间的temp表存在查询条件,在数据库内部进行直接查询

select * from table_1 where column_1 in ( select column_2 from table_2_temp )

建立临时表表

ORACLE临时表有两种类型:会话级的临时表和事务级的临时表。

1)ON COMMIT DELETE ROWS

它是临时表的默认参数,表示临时表中的数据仅在事务过程(Transaction)中有效,当事务提交(COMMIT)后,临时表的暂时段将被自动截断(TRUNCATE),但是临时表的结构 以及元数据还存储在用户的数据字典中。如果临时表完成它的使命后,最好删除临时表,否则数据库会残留很多临时表的表结构和元数据。

2)ON COMMIT PRESERVE ROWS

它表示临时表的内容可以跨事务而存在,不过,当该会话结束时,临时表的暂时段将随着会话的结束而被丢弃,临时表中的数据自然也就随之丢弃。但是临时表的结构以及元数据还存储在用户的数据字典中。如果临时表完成它的使命后,最好删除临时表,否则数据库会残留很多临时表的表结构和元数据。

create global temporary table t_test_temp (id varchar(20)) on commit preserve rows;
insert into t_test_temp VALUES('test0001');

SELECT * FROM t_test_name v WHERE EXISTS (
SELECT 1 FROM (select NAME from t_test a WHERE EXISTS (
select 1 from t_test_temp t WHERE a.id = t.id))b WHERE v.NAME=b.NAME)

参考:

https://blog.csdn.net/xiaomgee/article/details/83276693

https://www.cnblogs.com/hankuikui/p/11414494.html

https://my.oschina.net/6tao/blog/388495

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-06-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决办法
    • 使用or/union连接
      • 使用元组
        • 查询中间表
          • 建立临时表表
          相关产品与服务
          对象存储
          对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档