Esta sentencia se encuentra habilitada en PL/SQL , ella nos permite leer varios registros en una tabla a través de un único acceso usando la instrucción BULK COLLECT. De esta manera, se logra minimizar el numero de accesos a la BD, de tal forma que se optimizara el rendimiento. Una de sus desventajas es que el consumo de memoria sera algo mayor, pero esto es compensado con la velocidad con la que se puede procesar gran cantidad de registros.
Aquí un ejemplo de su uso mediante un procedimiento almacenado:
-------------------------------------------------------------------------------------------------------------------
Create or Replace PROCEDURE procesar_Filas (limite_in IN PLS_INTEGER DEFAULT 25)
IS
-- la variable limite_in es
el valor que indica de cuanto en cuanto procesara la informacion
CURSOR productos_cur
IS -- Indicamos el Query de los
datos a procesar--
SELECT idproducto, descripcion
FROM Producto;
--------------------------------------------
-- Se
declara una tipo de variable para
-- el procesamiento de los datos---
TYPE Productos_aat IS TABLE OF productos_cur%ROWTYPE
INDEX BY PLS_INTEGER;
--
Declaramos la variable ---
l_Productos Productos_aat;
BEGIN
-- Abrimos
el cursor
OPEN productos_cur;
LOOP
--
Inicializamos la clausula Bulk Colect
---estableciendo el limite de
procesamiento---
FETCH productos_cur BULK COLLECT INTO l_Productos LIMIT limite_in;
FOR indx IN 1 .. l_Productos.COUNT
LOOP
/*-----Ejemplo de un dbms_output.put_line
-----*/
--dbms_output.put_line(l_Productos(indx).idproducto
||', ' ||l_Productos(indx).descripcion);
--dbms_output.put_line('---');
-----------------------------------------------------
--
Aqui tambien puede ir una sentencia insert o --
--
lo que se dese hacer con este bloque de datos --
--
Ejm: --
-----------------------------------------------------
Insert into temp_datop
values (l_Productos(indx).idproducto,
l_Productos(indx).descripcion);
END LOOP;
EXIT WHEN l_Productos.COUNT < limite_in;
END LOOP;
CLOSE productos_cur;
END procesar_Filas;
-------------------------------------------------------------------------------------------------------------------
Como se puede apreciar el limite de procesamiento se ha establecido dentro de una variable en el SP (limite_in), considero que lo mas optimo es procesar datos de 25 en 25, claro, este valor siempre puede ser mayor, pero lo recomendable es que no sobrepase los 100.
Espero este Post sea de su ayuda y si tienen alguna duda o comentario no duden en ponerla.
Saludos,
Como se puede apreciar el limite de procesamiento se ha establecido dentro de una variable en el SP (limite_in), considero que lo mas optimo es procesar datos de 25 en 25, claro, este valor siempre puede ser mayor, pero lo recomendable es que no sobrepase los 100.
Espero este Post sea de su ayuda y si tienen alguna duda o comentario no duden en ponerla.
Saludos,