PL-SQL Packages en OracleMuchas veces cuando estas escribiendo código en tus PL-SQL Packages en Oracle, tiendes a repetir o duplicar una rutina de código porque debes aplicarla para más de un caso a la vez. Esta táctica no es recomendable porque al final resulta ser muy peligrosa si el código sigue creciendo y no se mantiene correctamente.

Este método es peligroso porque si repites varias veces un trozo de código fuente en tus PL-SQL Packages en Oracle,  donde solo cambian un par de parámetros y el resto del código se mantiene igual, cuando debas realizar alguna modificación que afecta a cada código repetido, te olvidarás de aplicar el cambio en todos las partes, lo que producirá problemas en la ejecución de los procesos y el código fuente se volverá engorroso, ilegible e inmantenible en tus PL-SQL Packages en Oracle.

Para solucionar este problema debes utilizar el ciclo FOR, que permite básicamente ejecutar un mismo trozo de código mas de una vez de forma controlada, es decir, que puedes programar un ciclo FOR para que se repita las veces que sea necesario. Para entender mejor esta problemática veamos algunos ejemplos en PL-SQL Packages en Oracle que sean prácticos.

Ejemplo #1: Supone que debes contar los empleados que se encuentran en 3 estados civiles diferentes, veamos la forma errónea y luego la forma correcta:

Forma errónea:

/* PL-SQL Packages en Oracle */

Select count(1) Into lin_cant_emp From t_empleado Where id_estado_civil = 1; – 1= Soleto

If lin_cant_emp > 50 then

— procesar empleados

End if;

Select count(1) Into lin_cant_emp From t_empleado Where id_estado_civil = 2; – 2= Casado

If lin_cant_emp > 50 then

— procesar empleados

End if;

Select count(1) Into lin_cant_emp From t_empleado Where id_estado_civil = 3; – 3= Separado

If lin_cant_emp > 50 then

— procesar empleados

End if;

Muchos desarrolladores tienden a realizar esto que esta erróneo. En este ejemplo se esta repitiendo el código 3 veces para contar los empleados por cada estado civil diferente, lo único que cambia es el ID del estado civil y el resto del código se mantiene. Si debes realizar un cambio debes tener la precaución de hacerlo en las tres partes repetidas en tus PL-SQL Packages en Oracle.

Forma correcta:

/* PL-SQL Packages en Oracle */

For lin_Id_Estado_Civil In 1..3 Loop

Select count(1) Into lin_cant_emp From t_empleado

Where id_estado_civil = lin_id_estado_civil

If lin_cant_emp > 50 then

— procesar empleados

End if;

End loop;

En este ejemplo se ejecuta 3 veces un mismo trozo de código dentro de un ciclo FOR, donde lo único que cambia es el ID del estado civil el cual se obtiene de la variable lin_id_estado_civil que es actualizada por el ciclo FOR, esto es mucho mas eficiente. A diferencia del ejemplo anterior, si debes realizar una modificación solo lo haces una vez y el cambio queda listo para todos los casos en tus PL-SQL Packages en Oracle.

La forma eficaz de resolver esto es haciendo lo siguiente:

/* PL-SQL Packages en Oracle */

For reg_empleado In (  Select id_estado_civil, count(1)  cant_emp

From t_empleado

Group By id_estado_civil )

Loop

If reg_empleado.cant_emp > 50 Then

— procesar empleados

End if;

End Loop;

En este ejemplo se crea un cursor explicito dentro del ciclo FOR, donde se agrupa por el id_estado_civil para contar los empleados de cada uno de los estados. Esta forma es la más eficaz de todas ya que la consulta a la base de datos se realiza solo una vez en tus PL-SQL Packages en Oracle.

Te propongo que pruebes de inmediato este ejemplo en tu Base de Datos con tus propios PL-SQL Procedures en Oracle y PL-SQL Function en Oracle, para que comiences a ejercitar la mano y aprendas a dominar esta nueva técnica en tus PL-SQL Packages en Oracle.

Estoy muy interesado en conocer tu opinión y/o comentario sobre este artículo, también cuéntame sobre qué es lo que quieres saber de PL-SQL Packages en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con PL-SQL Packages en Oracle. Estaré muy atento respondiendo tus preguntas y/o comentarios, gracias.

Saludos

Roberto Vicencio – Para Tu Éxito con Oracle.

Director del Curso “Domina Tus Packages En Oracle