jueves, marzo 29, 2012

BULK COLLECT en ORACLE

Bulk Collect es la forma como Oracle maneja arreglos. puedes usarlo si quieres evitar el uso excesivo de cursores. la ventaja de Bulk Collect es que se maneja en memoria y evita la escritura a disco, por lo cual resulta optimo guardar datos con Bulk Collect.

Hay que tener en cuenta que no debemos utilizar grandes cantidades de información con Bulk Collect porque la memoria del servidor Oracle se puede ver afectado y a la vez tambien afectar otros procesos.

Este es un pequeño ejemplo donde se pasa toda la informacion de la tabla PRODUCTOS al arreglo PRODUCTOS_COLECCION


CREATE TABLE PRODUCTOS
(
  COD_PRODUCTO VARCHAR(10),
  DES_PRODUCTO VARCHAR2(50),
  FLG_ACTIVO CHAR(1)
);

INSERT INTO PRODUCTOS VALUES ('1','ARROZ','S');
INSERT INTO PRODUCTOS VALUES ('2','ACEITE','S');
INSERT INTO PRODUCTOS VALUES ('3','AZUCAR','S');

DECLARE 
  
  TYPE PRODUCTO_FILA IS RECORD (COD_PRODUCTO VARCHAR(10),
                                DES_PRODUCTO VARCHAR2(50),
                                FLG_ACTIVO CHAR(1));
  
  TYPE TYPE_TABLA_PRODUCTOS IS TABLE OF PRODUCTO_FILA; 
  PRODUCTOS_COLECCION TYPE_TABLA_PRODUCTOS; 
  
 BEGIN
 
    SELECT COD_PRODUCTO,DES_PRODUCTO,FLG_ACTIVO
    BULK COLLECT INTO PRODUCTOS_COLECCION 
    FROM PRODUCTOS;
    
    --OBTENER LA DESCRICPION DE LOS PRODUCTOS
    FOR  I IN 1 .. PRODUCTOS_COLECCION.COUNT 
    LOOP
       DBMS_OUTPUT.PUT_LINE(PRODUCTOS_COLECCION(I).DES_PRODUCTO);    
    END LOOP;
    
 END;

No hay comentarios.: