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 ;
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