1.问题现象:
最近的项目使用oracle数据库,但是sql中 in(1,2,3,...) 当in 的参数超过1000 就会报 ORA-01795: 列表中的最大表达式数为 1000 这个错误
2.解决办法:
例如:select * from employee where id in (1,2,3,...,1001)
可以修改为: select * from employee where (0,id) in ( (0,1),(0,2),(0,3),...,(0,1001) )
若是mybatis 动态sql,即:
<select id="getEmpByIds" resultType="com.mydemo.bean.Employee" parameterType="java.util.List">
SELECT
* FROM EMPLOYEE WHERE (0,id) IN
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
(0,#{item})
</foreach>
</select>
如此完美解决。