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语句时稍微注意一下就好了。

时间: 2024-08-26 16:08:43

java jdbc oracle ORA-01795: 列表中的最大表达式数为 1000的相关文章

Sql语句报ORA-01795: 列表中的最大表达式数为 1000

错误信息:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000,错误信息如下: serviceid是:work -------------other WorkCmd-------------------------hz2 <2017-6-13 下午06时23分06秒 CST> <Warning> <Socket> <BEA-000449> <Closing socket as no data read f

IN 查询时出现ORA-01795:列表中的最大表达式数为1000解决方法

问题描述: SQL进行IN查询时出现:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000 解决办法: 问题原因是:SQL进行IN查询时,IN中的数据量不能超过1000条. 例如:select * from student where id in ('S1','S2'...........) 如果in后面数据量过多的话就会报错. 解决方法是:用 or关键字 如:select * from student where id in('S1','S2',

ORA-01795: 列表中的最大表达式数为 1000

系统报出一SQL异常,内容如下: java.sql.SQLException: ORA-01795: maximum number of expressions in a list is 1000 找出抛异常时执行的SQL语句,貌不惊人啊,很平常一SQL语句,内容类似:SELECT * FROM DUAL T WHERE T.DUMMY IN ('1', '2', '3', ...),只是IN后括号里的主键值多了些,其它没啥特别的. 看ORA-01795中给出的内容是SQL语句的 express

Caused by: java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000解决方案

这个原因在于Oracle语法限制,in内数量必须小于1000,故采取满1000分割用OR连接,下面是解决方案: /** * Example: List sqhlist=[''aa''"bb""cc""dd""ee""ff""gg"'] ; * Test.getSqlStrByList(sqhList,3,"SHENQINGH")= "SHENQING IN

将Lambda表达式作为参数传递并解析-在构造函数参数列表中使用Lambda表达式

public class DemoClass { /// <summary> /// 通过Lambda表达式,在构造函数中赋初始值 /// </summary> /// <param name="propertyFunc"></param> /// <param name="propertyValue"></param> public DemoClass (Expression<Func&

剑指Offer-孩子们的游戏(圆圈中最后剩下的数)

package Other; import java.util.LinkedList; /** * 孩子们的游戏(圆圈中最后剩下的数) * 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏. * 其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机指定一个数m,让编号为0的小朋友开始报数. * 每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,

Java 调用Oracle中的存储过程

--建表 SQL> create table TBook(bookId number(8),bookName varchar2(50),publishHouse varchar2(50)); --编写过程 --in:输入参数:out:输出参数 SQL> create or replace procedure sp_pro7(spBookId in number,spName in Varchar2,spPublishHost in varchar2) is begin insert into

java:Oracle(事务,分页,jdbc)

1.事务:transaction -- 事务开启的唯一条件就是:对数据库进行增,删,改的时候 -- 换句话说,对数据进行增删改以后,必须要执行提交或者回滚 -- 事务就是把数据库中的数据从一致状态转换为另一种一致状态 delete from teacher where id = 7;-- 现在把teacher给锁住了 -- 自动执行提交 commit; -- 自动回滚 rollback; update teacher set name='hehehehehehehe',age=30 where

java向oracle数据库中插入当前时间

public class Test{public static void main (String args []){ java.util.Date a = new java.util.Date();System.out.println(a);java.sql.Date b = new java.sql.Date(a.getTime());System.out.println(b);java.sql.Time c = new java.sql.Time(a.getTime());System.o