oracle insert操作分批量提交

对临时表做insert插入时没有做批量提交,可能会导致undo表空间撑爆,修改脚本对插数进行2万一次的批量提交,并且修改索引和同义词创建时间在插数操作结束后。

原语句

复制代码
insert into 目标表 select * from 源表;

改为2w次一提交

复制代码
DECLARE
    CURSOR data_cursor IS
        SELECT *
        FROM 源表;
    TYPE data_array IS TABLE OF data_cursor%ROWTYPE;
    data data_array;
BEGIN
    OPEN data_cursor;
    LOOP
        FETCH data_cursor BULK COLLECT INTO data LIMIT 20000; -- 每次获取2万条数据
        FORALL i IN 1..data.COUNT
            INSERT INTO 目标表 
            VALUES data(i);
        COMMIT; -- 每次提交
        EXIT WHEN data_cursor%NOTFOUND;
    END LOOP;
    CLOSE data_cursor;
END;
/

删除目标表数据(2022-12-31 23:59:59之前的表数据)

复制代码
DECLARE
  COMMIT_INTERVAL NUMBER := 10000; -- 每次提交的记录数
  COMMIT_COUNT NUMBER := 0;
BEGIN
  FOR rec IN (SELECT * FROM 目标表 WHERE createtime < '2022-12-31 23:59:59'  ) LOOP
    DELETE FROM ER_VOUCHER WHERE id = rec.id;
    COMMIT_COUNT := COMMIT_COUNT + 1;
    
    -- 每次删除一万条记录后提交
    IF COMMIT_COUNT >= COMMIT_INTERVAL THEN
      COMMIT;
      COMMIT_COUNT := 0;
    END IF;
  END LOOP;

  -- 提交剩余的记录
  COMMIT;
END;
相关推荐
Skilce2 小时前
ZrLog 高可用部署
运维·服务器·数据库·阿里云·maven
indexsunny5 小时前
互联网大厂Java求职面试实战:微服务与Spring生态全攻略
java·数据库·spring boot·安全·微服务·面试·消息队列
沪漂阿龙5 小时前
别再让数据库“吃”脏数据了!一文讲透MySQL约束,从入门到精通
数据库·mysql
2401_873544927 小时前
使用Python进行PDF文件的处理与操作
jvm·数据库·python
虾..7 小时前
多路复用 --- select系统调用
服务器·数据库·sql
杨云龙UP7 小时前
mysqldump逻辑备份文件恢复总结:全库恢复、单库恢复,一篇讲明白
linux·运维·服务器·数据库·mysql·adb
ybwycx7 小时前
mysql重置root密码(适用于5.7和8.0)
数据库·mysql·adb
色空大师8 小时前
【网站搭建实操(一)环境部署】
java·linux·数据库·mysql·网站搭建
亚历克斯神9 小时前
Flutter for OpenHarmony: Flutter 三方库 mutex 为鸿蒙异步任务提供可靠的临界资源互斥锁(并发安全基石)
android·数据库·安全·flutter·华为·harmonyos
IAUTOMOBILE9 小时前
用Python批量处理Excel和CSV文件
jvm·数据库·python