DECLARE TYPE NumTab IS TABLE OF NUMBER(4) INDEX BY BINARY_INTEGER; TYPE NameTab IS TABLE OF CHAR(15) INDEX BY BINARY_INTEGER; pnums NumTab; pnames NameTab; t1 CHAR(5); t2 CHAR(5); t3 CHAR(5); PROCEDURE get_time(t OUT NUMBER) IS BEGIN SELECT TO_CHAR(SYSDATE,'SSSSS') INTO t FROM dual; END; BEGIN FOR j IN 1..5000 LOOP -- load index-by tables pnums(j) := j; pnames(j) := 'Part No. ' || TO_CHAR(j); END LOOP; get_time(t1); FOR i IN 1..5000 LOOP -- use FOR loop INSERT INTO parts VALUES (pnums(i), pnames(i)); END LOOP; get_time(t2); FORALL i IN 1..5000 --use FORALL statement INSERT INTO parts VALUES (pnums(i), pnames(i)); get_time(t3); DBMS_OUTPUT.PUT_LINE('Execution Time (secs)'); DBMS_OUTPUT.PUT_LINE('---------------------'); DBMS_OUTPUT.PUT_LINE('FOR loop: ' || TO_CHAR(t2 - t1)); DBMS_OUTPUT.PUT_LINE('FORALL: ' || TO_CHAR(t3 - t2)); END; / SQL> @bulk.sql Execution Time (secs) --------------------FOR loop: 8 FORALL: 0