BULK COLLECT
PL/SQL nos permite leer varios registros en una tabla de PL con un único acceso a través de la instrucción BULK COLLECT.
Esto nos permitirá reducir el número de accesos a disco, por lo que optimizaremos el rendimiento de nuestras aplicaciones. Como contrapartida el consumo de memoria será mayor.
DECLARE TYPE t_descripcion IS TABLE OF PAISES.DESCRIPCION%TYPE; TYPE t_continente IS TABLE OF PAISES.CONTINENTE%TYPE;
v_descripcion t_descripcion; v_continente t_continente; BEGIN SELECT DESCRIPCION, CONTINENTE BULK COLLECT INTO v_descripcion, v_continente FROM PAISES; FOR i IN v_descripcion.FIRST .. v_descripcion.LAST LOOP dbms_output.put_line(v_descripcion(i) || ', ' || v_continente(i)); END LOOP; END; / |
Podemos utilizar BULK COLLECT con registros de PL.
DECLARE TYPE PAIS IS RECORD (CO_PAIS NUMBER , DESCRIPCION VARCHAR2(50), CONTINENTE VARCHAR2(20)); TYPE t_paises IS TABLE OF PAIS;
v_paises t_paises; BEGIN SELECT CO_PAIS, DESCRIPCION, CONTINENTE BULK COLLECT INTO v_paises FROM PAISES; FOR i IN v_paises.FIRST .. v_paises.LAST LOOP dbms_output.put_line(v_paises(i).DESCRIPCION || ', ' || v_paises(i).CONTINENTE); END LOOP; END; / |
Tambien podemos utilizar el atributo ROWTYPE.
DECLARE TYPE t_paises IS TABLE OF PAISES%ROWTYPE;
v_paises t_paises; BEGIN SELECT CO_PAIS, DESCRIPCION, CONTINENTE BULK COLLECT INTO v_paises FROM PAISES; FOR i IN v_paises.FIRST .. v_paises.LAST LOOP dbms_output.put_line(v_paises(i).DESCRIPCION || ', ' || v_paises(i).CONTINENTE); END LOOP; END; / |