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

Seleccionar recolección masiva en el ejemplo de Oracle

En la publicación de blog anterior, he dado un ejemplo para usar Oracle Bulk Collect usando el objeto de tipo de fila de cursor. Que primero crea el cursor, luego escribe el objeto del tipo de cursor y luego abre el cursor, lo obtiene en una recopilación masiva y finalmente lo procesa usando Forall. Pero a veces es posible que deba preparar algunos datos solo una vez con un bloque PLSQL anónimo temporal, y no desea escribir demasiado código para realizar esa tarea. Para este tipo de escenarios, puede usar Seleccionar recolección masiva en una opción para realizar cualquier tarea rápidamente sin perder demasiado tiempo escribiendo código.

A continuación se muestra el ejemplo del bloque PLSQL que tomará los registros de la tabla EMP y actualizará la tabla BONUS y también se imprimirá en la pantalla.

SET SEVEROUTPUT ON;
DECLARE
TYPE t_emp IS TABLE OF emp%ROWTYPE;

e_rec   t_emp;
BEGIN
SELECT *
BULK COLLECT INTO e_rec
FROM emp;

FORALL i IN e_rec.FIRST .. e_rec.LAST
update bonus set amount = e_rec(i).sal * 15 / 100
where empno = e_rec(i).empno;

Commit;

FOR i IN e_rec.FIRST .. e_rec.LAST
LOOP
DBMS_OUTPUT.
put_line (
'Bonus Updated For Employee: '
|| e_rec (i).ename
|| ' '
|| 'Bonus: '
|| e_rec(i).sal * 15 / 100);
END LOOP;
END;