项目中遇到SQL语句的In超过1000这个问题,再次总结一下解决方案:
- 使用动态拼接SQL语句in(...) or in(..),性能太差,再次不多说
- 使用表代替in中的字符串,事务问题
- 由2引申出使用oracle的临时表,使用临时表,想怎么查怎么查。(该问题中,本人用的是事务临时表)
在这详细说一下,临时表:
oracle的临时表分为两种:事务临时表和会话临时表。oracle的临时表就是用来暂时保存临时数据(亦或叫中间数据)的一个数据库对象,它和普通表有些类似,然而又有很大区别。它只能存储在临时表空间,而非用户的表空间。ORACLE临时表是会话或事务级别的,只对当前会话或事务可见。每个会话只能查看和修改自己的数据。
- 会话临时表创建:create global temporary table temp1(id number) on commit PRESERVE rows;
- 事务临时表创建:create global temporary table temp1(id number) on commit delete rows;
注:
- 网还有另外一种创建方式create global temporary table temp1 ON COMMIT PRESERVE ROWS as select id from 另一个表;
- oracle的临时表创建完就是真实存在的,无需每次都创建。
算法思路就是:
- 获取数据库连接
- 关闭自动提交
- 想临时表插入数据
- 查询
- 提交
- 关闭数据库连接
哪位大佬如有发现错误,不吝赐教,谢谢。