Tuesday, 21 January 2014

This will use RAM

SQL> create or replace procedure fast_proc is
2         type TObjectTable is table of ALL_OBJECTS%ROWTYPE;
3         ObjectTable$ TObjectTable;
4         begin
5         select
6                     * BULK COLLECT INTO ObjectTable$
7         from ALL_OBJECTS;
8
9         forall x in ObjectTable$.First..ObjectTable$.Last
10       insert into t1 values ObjectTable$(x) ;
11       end;



DECLARE
p_array_size NUMBER :=100871113;

TYPE ARRAY IS TABLE OF TC10972.BI_LINE_KEY_TABLE%ROWTYPE;
l_data ARRAY;

CURSOR c IS
SELECT *
FROM TC10972.BI_LINE_KEY_TABLE;

BEGIN
    OPEN c;
    LOOP
    FETCH c BULK COLLECT INTO l_data LIMIT p_array_size;

    FORALL i IN 1..l_data.COUNT
    INSERT INTO CO97273.BI_LINE_KEY_TABLE VALUES l_data(i);

    EXIT WHEN c%NOTFOUND;
    END LOOP;
    CLOSE c;

END ;




Totally 110 milliomn rows inserted in 13 min with only one columns

DECLARE
p_array_size NUMBER :=100000;

TYPE ARRAY IS TABLE OF one.source_table%ROWTYPE;
l_data ARRAY;

CURSOR c IS
SELECT *
FROM one.source_table;

BEGIN
    OPEN c;
    LOOP
    FETCH c BULK COLLECT INTO l_data LIMIT p_array_size;

    FORALL i IN 1..l_data.COUNT
    INSERT INTO one.target_table VALUES l_data(i);
    commit;
    EXIT WHEN c%NOTFOUND;
    END LOOP;
    CLOSE c;

END ;

No comments:

Post a Comment