批量insert示例

本文介绍了一种使用Oracle数据库进行批量数据插入的优化方法。通过游标和条件判断结合FORALL语句实现高效的数据处理,同时展示了如何从一张表中选择特定记录插入到另一张表,并在每次达到预设数量时提交事务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DROP TABLE test1 PURGE
/
DROP TABLE test2 PURGE
/
CREATE TABLE test1 AS SELECT * FROM Dba_Objects
/
CREATE TABLE test2 AS SELECT * FROM test1 WHERE 1=2
/
DECLARE
  v_limit           INT := 10000;
  v_idx             INT := 0;
  bl_notfound       BOOLEAN;
  v_object_id       NUMBER;
  v_object_name     VARCHAR2(30);
  object_id_table   dbms_sql.number_table;
  object_name_table dbms_sql.varchar2_table;
  CURSOR cur_test1 IS
    SELECT object_id, object_name FROM test1;
BEGIN
  DELETE FROM test2;
  COMMIT;
  OPEN cur_test1;
  LOOP
    FETCH cur_test1
      INTO v_object_id, v_object_name;
    bl_notfound := cur_test1%NOTFOUND;
    /*分条件赋值*/
    IF MOD(v_object_id, 7) = 0 THEN
      v_idx := v_idx + 1;
      object_id_table(v_idx) := v_object_id;
      object_name_table(v_idx) := v_object_name;
    END IF;
    /*到达限定条数就insert*/
    IF bl_notfound OR v_idx >= v_limit THEN
      v_idx := 0;
      FORALL i IN 1 .. object_id_table.count
        INSERT INTO test2
          (object_id, object_name)
        VALUES
          (object_id_table(i), object_name_table(i));
      COMMIT;
      object_name_table.delete;
      object_id_table.delete;
      IF bl_notfound THEN
        EXIT;
      END IF;
    END IF;
  END LOOP;
END;
/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值