zoukankan      html  css  js  c++  java
  • 关于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
    <foreach item="item" index="index" collection="snos" open="(" separator="," close=")">
    	#{item}
    </foreach>
    

     2.修改后的语句

    SELECT *
        FROM TABLE_A
    WHERE 1 = 1
       AND  
    <foreach item="item" index="index" collection="snos" open="(" separator="OR" close=")">
    	SNO IN #{item}
    </foreach>
    

    或者为

    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)
    

     第一种方法常常会进行全表扫描,第二种方法效率会更高些。

  • 相关阅读:
    Python的网络编程 Socket编程
    Python之数据库模块安装 MySQLdb
    Python的内置函数
    Servlet及Tomcat介绍
    xml解析
    JDBC基础
    反射练习
    lambda和匿名内部类
    Object.wait()实现生产者消费者模式
    synchronized、lock及线程安全集合
  • 原文地址:https://www.cnblogs.com/wangkundentisy/p/12713675.html
Copyright © 2011-2022 走看看