ISSUE:
table is locked when insert/update millions records and commit at the end. Run time will be very long if commit after every record change.
SOLUTION:
Oracle provide bulk insert/update by fetch multiple records first and perform insert/update on them with commit.
example:
CREATE OR REPLACE PROCEDURE test_proc (p_array_size IN PLS_INTEGER DEFAULT 100)
IS
TYPE ARRAY IS TABLE OF all_objects%ROWTYPE;
l_data ARRAY;
CURSOR c IS SELECT * FROM all_objects;
BEGIN
OPEN c;
LOOP
FETCH c BULK COLLECT INTO l_data LIMIT
p_array_size;
FORALL i IN 1..l_data.COUNT
INSERT INTO t1 VALUES l_data(i);
EXIT WHEN c%NOTFOUND;
END LOOP;
CLOSE c;
END test_proc;
/
reference:
http://www.akadia.com/services/ora_bulk_insert.html
No comments:
Post a Comment