• java jdbc oracle ORA-01795: 列表中的最大表达式数为 1000


    在操作SQL中存在In的数量如果超过1000条会提示   ORA-01795: 列表中的最大表达式数为 1000

    归纳有几种方式出现的:

    第一种是:我在上一个 [jdbc 同时执行 查询和删除操]作中提到 在一个事务中在了in操作超出了 1000条,修改代码如下:

     Connection conn = null;
            try {
                // 创建连接实例
                conn = JdbcUtility.GetFactory().CreateConn();
                conn.setAutoCommit(false);
                conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

                StringBuilder _strbd = new StringBuilder();
                _strbd.append(" delete from  table1  where id in ( ");
                _strbd.append(" select sp_1.table1 from  table2 ");
                _strbd.append("  sp_1,sp_tcontentinfo sp_2  ");
                _strbd.append(" where sp_1.id=sp_2.id");
                _strbd.append("  ) ");
                Statement stmt = conn.createStatement();
               
                // 执行语句
                int r = stmt.executeUpdate(_strbd.toString());
                conn.commit();
                stmt.close();
                log.info("清理数据成功!");
            } catch (Exception ex) {
                if (null != conn) {
                    try {
                        conn.rollback();
                    } catch (SQLException se) {
                        log.error("清理数据回滚失败!");
                    }
                }
                log.error("清理数据失败,错误信息为:"+ex.getMessage());
            } finally {
                if (null != conn) {
                    try {
                        conn.close();
                    } catch (SQLException se) {
                        log.error("清理数据,关闭数据库失败!");
                    }
                }
            }

    第二种: 在单独的查询中

    SQL里面的IN中的数据量不能超过1000条
    解决办法:
    例如
    Select * from table_name where col in (‘col1’,’col2’ ……..)
    如果in 后面的Item过多的话,超过1000就会出现这种错误。
    解决方法是:
    Select * from tablename where col in (‘col1’,’col2’ …….., ‘col1000’) or col in (‘col1001’, …………)

    在构建SQL语句时稍微注意一下就好了。

  • 相关阅读:
    idea配置tomcat运行按钮置灰,下拉没有自定义的tomcat选项
    配置多版本jdk,自由切换jdk版本
    五年经验程序员告诉你,如何确定自己是否适合做程序员
    你的编程能力从什么时候开始突飞猛进?
    10 个提升效率的Linux小技巧
    8 种经常被忽视的 SQL 错误用法,你有没有踩过坑?
    十大优秀编程项目,让你的简历金光闪闪
    一文掌握 Lambda 表达式
    一文详解微服务架构(一)
    Java的参数传递是「按值传递」还是「按引用传递」?
  • 原文地址:https://www.cnblogs.com/northeastTycoon/p/5737878.html
Copyright © 2020-2023  润新知