Neste post, estou dando um exemplo para realizar uma inserção usando o comando Oracle Bulk Collect e FORALL. Criou uma função PL SQL que levará dados da tabela EMP usando um cursor, em seguida, cria uma variável de matriz de tipo desse tipo de linha de cursor e, em seguida, coleta e insere em massa na tabela BONUS usando FORALL.
Abaixo segue o exemplo:
CREATE OR REPLACE FUNCTION f_currowtype RETURN BOOLEAN IS CURSOR c_emp IS SELECT empno, ename, job, sal FROM emp; TYPE t_emp IS TABLE OF c_emp%ROWTYPE; e_rec t_emp; BEGIN OPEN c_emp; FETCH c_emp BULK COLLECT INTO e_rec; CLOSE c_emp; FORALL i IN e_rec.FIRST .. e_rec.LAST insert into bonus (empno, amount) values (e_rec(i).empno, e_rec(i).sal * 10 / 100); DBMS_OUTPUT.put_line ('Rows inserted: ' || SQL%ROWCOUNT); COMMIT; RETURN TRUE; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN FALSE; END;
Você pode executá-lo como abaixo:
SET SERVEROUTPUT ON; BEGIN IF f_currowtype THEN DBMS_OUTPUT.put_line ('Success'); ELSE DBMS_OUTPUT.put_line ('Failed'); END IF; END;