zoukankan      html  css  js  c++  java
  • oracle语句批处理

    数据量有40万条,从一个对象table_01一条一条取数到对象table_02,如果用原始的

    Statement Statmt =comm.createStatement();
    String  sql="insert into tb2....";
    Statmt.executeUpdate(sql);
    newCon.commit();//这里是每执行一条sql插入语句就commit一次
    Statmt.close();

    当io操作频繁的时候必然会降低sql性能,这里可以采取分批commit的形式减少io操作。

    首先定义一个计数器count,当count%1000的时候commit一次,记住最后再commit一次可以把不足1000的剩下数据提交。

    其次用batch进行批量提交sql

    Statmt.addBatch(sql);        
    Statmt.executeBatch();    
     if(count%1000==0){
          newCon.commit();
          Statmt.clearBatch();
    }    

    /**
        主意有些操作是不可以分批commit的,比如一个完整的事务提交,否则不方便数据回滚处理。
    **/
    Connection conn = DBPool.getConnection();
    conn.setAutoCommit(false);
    Statement statmt =conn.createStatement();
    statmt.addBatch(sql);        
    statmt.executeBatch();   
    statmt.addBatch(sql);        
    statmt.executeBatch()
    .....
    statmt.clearBatch();
    conn.commit();
    /**记得异常回滚和资源关闭*/
    statmt.close();
    conn.close();

    错误归类:

    java.sql.BatchUpdateException: 无效的批处理命令: invalid SELECT batch command 0

    原因是:sql语句包含了select语句,批量处理只能提交insert、update、delete等操作

  • 相关阅读:
    DPDK — 网卡初始化流程(Intel 82599 ixgbe 网卡驱动示例)
    leetcode 3. 无重复字符的最长子串
    20193120 实验四 Python综合实践
    hadoop常用的端口号
    Django学习笔记
    ORACLE EBS AP invoice 到付款的数据流
    EBS 系统标准职责定义MAP
    Advanced Pricing
    Oracle Advanced Pricing White Papers
    增加AP INVOICE 行&分配行
  • 原文地址:https://www.cnblogs.com/zhutouying/p/3156514.html
Copyright © 2011-2022 走看看