Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Exemplo de coleta em massa do Oracle usando objeto de tipo de tipo de linha de cursor


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;