1.通用版
select * from test_table
where 1 = 1
<!-- IdList -->
<if test="IdList != null and IdList.size > 0">
AND PK_ID IN
<!-- 处理in的集合超过1000条时Oracle不支持的情况 -->
<trim suffixOverrides=" OR PK_ID IN()"> <!-- 表示删除最后一个条件 -->
<foreach collection="IdList" item="Id" index="index" open="(" close=")">
<if test="index != 0">
<choose>
<when test="index % 1000 == 999">) OR PK_ID IN (</when>
<otherwise>,</otherwise>
</choose>
</if>
#{Id}
</foreach>
</trim>
</if>
2.优化
就是建立一个表来存储传入参数,取数据的时候先从临时表中遍历取参数,然后再将取出的参数拿去作为条件用,
——解决思路———————-
把这 2000 个值写到一个临时表中,直接 in 一个子查询
select * from t where id in (select id from temp)
- 1
——解决思路———————-
引用:
把这 2000 个值写到一个临时表中,直接 in 一个子查询
select * from t where id in (select id from temp)
- 1
赞同。。
——解决思路———————-
引用:
先感谢一下楼上各位!确实可以用这种方式解决
再请教一下,怎么插入临时表效率更高?一条一条插肯定是很慢的
插入的话本身应该是很快的,虽然条数很多,但是时间也不会很长
如果还嫌慢的话可以插入是加上append参数,这样不用写日志,直接写入数据库
insert /+append/ into