sql >> Base de Datos >  >> RDS >> Oracle

Ejemplo de Oracle Bulk Collect usando un objeto de tipo de fila de cursor

En esta publicación, doy un ejemplo para realizar una inserción en el uso de Oracle Bulk Collect y el comando FORALL. Creó una función PL SQL que tomará datos de la tabla EMP usando un cursor, luego crea una variable de matriz de tipo de ese tipo de fila de cursor y luego recopila e inserta en masa en la tabla BONUS usando FORALL.

A continuación se muestra el ejemplo:

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;

Puede ejecutarlo de la siguiente manera:

SET SERVEROUTPUT ON;

BEGIN
IF f_currowtype
THEN
DBMS_OUTPUT.put_line ('Success');
ELSE
DBMS_OUTPUT.put_line ('Failed');
END IF;
END;