How do I use bulk collect and insert in Pl/SQl

前端 未结 3 1553
难免孤独
难免孤独 2020-12-19 19:09

I want to fetch around 6 millions rows from one table and insert them all into another table. How do I do it using BULK COLLECT and FORALL ?

3条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-12-19 19:49

    oracle

    Below is an example From

    CREATE OR REPLACE PROCEDURE fast_way IS
    
    TYPE PartNum IS TABLE OF parent.part_num%TYPE
    INDEX BY BINARY_INTEGER;
    pnum_t PartNum;
    
    TYPE PartName IS TABLE OF parent.part_name%TYPE
    INDEX BY BINARY_INTEGER;
    pnam_t PartName;
    
    BEGIN
      SELECT part_num, part_name
      BULK COLLECT INTO pnum_t, pnam_t
      FROM parent;
    
      FOR i IN pnum_t.FIRST .. pnum_t.LAST
      LOOP
        pnum_t(i) := pnum_t(i) * 10;
      END LOOP;
    
      FORALL i IN pnum_t.FIRST .. pnum_t.LAST
      INSERT INTO child
      (part_num, part_name)
      VALUES
      (pnum_t(i), pnam_t(i));
      COMMIT;
    END
    

提交回复
热议问题