存储过程中for循环中存在INSERT、UPDATE,如何减少commit的频率,控制多少次commit一次,例如500次commit一次

    declare
        record_count NUMBER;
        is_commnum     NUMBER;

    begin

        -- 初始化参数
        record_count := 0;
        is_commnum   := 500; -- 默认500次,commit一次

        FOR rec IN (SELECT * FROM TABLENAME WHERE ....) LOOP
        
          record_count := record_count + 1;
          INSERT INTO TABLENAME(...) VALUES (...);
          UPDATE TABLENAME SET COL1 = values1, ..... WHERE COLn = xxxxx;
          
          GOTO is_need_commit;        
          <<is_need_commit>>
          out_flag := '0';
          IF record_count MOD is_commnum = 0 THEN
              COMMIT;
          END IF;

        END LOOP;
        COMMIT:
    end;


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java项目一次执行多个SQL语句,可以使用JDBC的批量处理(Batch Processing)功能。 JDBC提供了三种批量处理方式:Statement的批量处理、PreparedStatement的批量处理和CallableStatement的批量处理。 其,Statement的批量处理是通过Statement的addBatch()方法来实现的,PreparedStatement的批量处理是通过PreparedStatement的addBatch()方法来实现的,而CallableStatement的批量处理是通过CallableStatement的addBatch()方法来实现的。 在进行批量处理之前,需要在数据库连接上进行配置,以告知数据库驱动程序我们要使用批量处理功能。具体来说,需要在创建Connection对象时,通过调用其setAutoCommit(false)方法来关闭自动提交事务的功能,然后通过调用createStatement()、prepareStatement()、prepareCall()方法来创建Statement、PreparedStatement、CallableStatement对象,并在这些对象上调用setFetchSize()方法来设置每从数据库获取的行数,最后在处理完所有批量操作之后,需要调用Connection对象的commit()方法来提交事务,并将自动提交事务的功能重新打开。 下面是一个示例代码,演示了如何在Java项目一次执行多个SQL语句: ```java Connection conn = DriverManager.getConnection(url, username, password); conn.setAutoCommit(false); Statement stmt = conn.createStatement(); stmt.setFetchSize(100); stmt.addBatch("INSERT INTO table1(column1, column2) VALUES(1, 'value1')"); stmt.addBatch("UPDATE table2 SET column3 = 'value2' WHERE column4 = 2"); stmt.addBatch("DELETE FROM table3 WHERE column5 > 3"); int[] results = stmt.executeBatch(); conn.commit(); conn.setAutoCommit(true); ``` 在这个示例代码,首先通过DriverManager.getConnection()方法创建了一个数据库连接对象conn,并调用其setAutoCommit(false)方法关闭自动提交事务的功能。然后调用conn.createStatement()方法创建了一个Statement对象stmt,并调用其setFetchSize()方法设置每从数据库获取的行数为100。接下来,调用stmt.addBatch()方法向批处理队列添加了三个SQL语句:一个INSERT语句、一个UPDATE语句和一个DELETE语句。然后调用stmt.executeBatch()方法一次性执行了所有SQL语句,并返回了每个SQL语句执行结果的数组。最后,调用conn.commit()方法提交事务,并将自动提交事务的功能重新打开。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值