oracle数据库in 超过1000 的解决方案

项目中遇到SQL语句的In超过1000这个问题,再次总结一下解决方案:

  1. 使用动态拼接SQL语句in(...) or in(..),性能太差,再次不多说
  2. 使用表代替in中的字符串,事务问题
  3. 由2引申出使用oracle的临时表,使用临时表,想怎么查怎么查。(该问题中,本人用的是事务临时表)

在这详细说一下,临时表:

oracle的临时表分为两种:事务临时表和会话临时表。oracle的临时表就是用来暂时保存临时数据(亦或叫中间数据)的一个数据库对象,它和普通表有些类似,然而又有很大区别。它只能存储在临时表空间,而非用户的表空间。ORACLE临时表是会话或事务级别的,只对当前会话或事务可见。每个会话只能查看和修改自己的数据。

  1. 会话临时表创建:create global temporary table temp1(id number) on commit PRESERVE rows;
  2. 事务临时表创建:create global temporary table temp1(id number) on commit delete rows;

注:

  1. 网还有另外一种创建方式create global temporary table temp1 ON COMMIT PRESERVE ROWS    as  select id from 另一个表;
  2. oracle的临时表创建完就是真实存在的,无需每次都创建。

算法思路就是:

  1. 获取数据库连接
  2. 关闭自动提交
  3. 想临时表插入数据
  4. 查询
  5. 提交
  6. 关闭数据库连接

哪位大佬如有发现错误,不吝赐教,谢谢。

   

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值