Using the
FORALL construct to bulk bind the inserts is reduced to reduce executed timeDECLARE
TYPE id_type IS TABLE OF test1.id%TYPE;
TYPE description_type IS TABLE OF test1.description%TYPE;
t_id id_type := id_type();
t_description description_type := description_type();
BEGIN
FOR i IN 1 .. 10000 LOOP
t_id.extend;
t_description.extend;
t_id(t_id.last) := i;
t_description(t_description.last) := 'Description: ' || To_Char(i);
END LOOP;
FORALL i IN t_id.first .. t_id.last
INSERT INTO test1 (id, description)
VALUES (t_id(i), t_description(i));
FORALL i IN t_id.first .. t_id.last
UPDATE test1
SET description = t_description(i)
WHERE id = t_id(i);
FORALL i IN t_id.first .. t_id.last
DELETE test1
WHERE id = t_id(i);
COMMIT;
END;
/
PL/SQL procedure successfully completed.
Elapsed: 00:00:18.05
------
Using the BULK COLLECT INTO construct reduces this time to approximately 0.01 seconds. DECLARE TYPE id_type IS TABLE OF test1.id%TYPE; TYPE description_type IS TABLE OF test1.description%TYPE; t_id id_type; t_description description_type; BEGIN SELECT id, description BULK COLLECT INTO t_id, t_description FROM test1; END; / PL/SQL procedure successfully completed. Elapsed: 00:00:00.01
No comments:
Post a Comment