pl sql
Para entender mejor en qué consiste esta técnica, primero hay que comprender losmotivos por los que un simple bucle FOR puede generar importantes problemas de rendimiento. Veamos el siguiente código PL/SQL:
FORselrec IN
(SELECT * FROM tabla_enorme
ORDER BY muchas columnas)
LOOP
-- Gran cantidad de código que omito y al final:
UPDATE tabla_enorme SET ...
WHEREclave_primaria = selrec.clave_primaria;
COMMIT;
END LOOP;
El presente código es un extracto de un código PLSQL que uno de los lectores de esteblog me envió por correo electrónico indicándome que presentaba graves problemas de rendimiento, cosa que desde un primer momento a mi no me extrañó, considerando que latabla tabla_enorme contenía más de 30 millones de registros. Es el típico ejemplo de código PL/SQL que para mejorar su rendimiento necesita que se aplique la técnica ofuncionalidad de BULK COLLECT (que traducido directamente a castellano sería similar a decir "recogida a granel" pero que aquí traduciremos por procesamiento masivo).
Antesde profundizar en el tema, debemos considerar que si leemos los datos de una base de datos Oracle sin necesidad de enviar datos de vuelta a la misma base de datos, no esnecesario aplicar la técnica del BULK COLLECT. Es decir, el siguiente código PL/SQL es perfectamente utilizable y no debería generar problemas de rendimiento:FOR x IN
(SELECT * FROM tabla_enorme t WHERE ...)
LOOP
DBMS_OUTPUT.PUT_LINE (x.col1||...||x.colN);
END LOOP;
Regístrate para leer el documento completo.