BULK COLLECT
En la base de datos Oracle hay dos motores, uno para ejecutar PL/SQL y otro para SQL. Cuando el PL/SQL quiere manipular datos, accede al motor de SQL. Esto conlleva muchos recursos. Bulk collect agrupa varias instrucciones y lo realiza en una sola ejecución, optimizando los cambios de contexto. Es importante si se trabaja con grandes volumenes de datos. Es un elemento básico, para los procedimientos ETL, ya que suelen filtrar y transformar tablas en una misma base de datos.
Tiene como inconveniente, que puede necesitar mayor cantidad de recursos de la máquina, por un lado al ejecutarse más rápido y por otro por necesidades de memoría.
Se almacenan en la PGA y no en la SGA. La PGA se asigna por sesión, por lo que si hay 200 sesiones de 10 MB implicará el consumo de 2 GB de memoria PGA a parte de la memoria SGA asignada. Se puede evitar utilizando la clusula «LIMIT». La solución es relativa porque no todas las PGA’s son iguales y un proceso puede funcionar bien en desarrollo y mal en producción.
En la versión Oracle 10G o superior Oracle ha optimizado los bucles FOR, convirtiéndodurante la compilación en Bulk Collects con Arrays de 100 elementos.
Bulk collect no es aplicable a dblinks.
SINTAXIS:
FETCH ... BULK COLLECT INTO ... [LIMIT rows];
Comments are closed.