关于Mybatis出现的ORA-01795错误
当oracle中执行带有in的SQL语句时,如果in后面的集合中元素的数目超过1000时,就会报错,即ORA-01795错误,此时可以有两种解决方案:
第一种:将SQL语句中的in(a,b,c..)的形式改成(in a or in b or in c.....)的形式
1.原来的语句
SELECT *
FROM TABLE_A
WHERE 1 = 1
AND SNO IN
#{item}
2.修改后的语句
SELECT *
FROM TABLE_A
WHERE 1 = 1
AND
SNO IN #{item}
或者为
IN(a,b,c...) OR IN(r,s,t...) OR IN(x,y,z...)
这种形式只要保证集合中元素的个数小于1000即可
第二种:将in集合中的数据插入到一个临时表中,然后筛选条件即这个临时表中的数据,语句如下:
SELECT *
FROM TABLE_A
WHERE 1 = 1
AND
SNO IN(SELECT SNO FROM TMP)
第一种方法常常会进行全表扫描,第二种方法效率会更高些。