Aprende a usar el Ciclo WHILE en los Packages de Oracle

Si aprendes cuando tomar la decisión de tener que usar un Ciclo WHILE podrás desarrollar Procedures en Oracle  y Function en Oracle que sean rápidos y eficientes al momento de manipular los datos, que los procesos no contengan código duplicado y que se puedan aplicar criterios y validaciones a una gran cantidad de registros en la Base de Datos.

El ciclo WHILE te permite básicamente repetir un mismo proceso más de una vez de forma controlada, es decir, yo puedo programar un ciclo WHILE para que se repita mientras una condición sea verdadera, por ejemplo, que se repita mientras tengas registros en el resultado de un Cursor.

Ahora te puedes preguntar ¿Para qué sirve que un proceso se repita varias veces?, muy fácil, para que No tengas que duplicar el código del proceso tantas veces como lo requieras ya que se volvería un código ilegible, desordenado y muy difícil de mantener. Toda esta problemática se resuelve utilizando un ciclo WHILE, o sus variantes como el ciclo LOOP o FOR, pero ahora solo nos referiremos al ciclo WHILE que es el que más se utiliza, para entenderlo mejor revisemos algunos ejemplos prácticos.

Ejemplo #1: Supongamos que se necesita ejecutar una consulta a la Base de Datos de Oracle 3 veces pero en cada consulta lo único que cambia es el valor del parámetro de búsqueda:

/* Function en Oracle */

lin_Id_Departamento:= 1;

While lin_Id_Departamento <= 3 Loop

Select Emp.Nombre, Emp.Edad Into l_Nombre, l_Edad From T_Empleados Emp   Where Emp.Rut = p_Rut And Emp.Id_Departamento = lin_Id_Departamento;

If l_Edad > 40 Then

… Procesar datos del empleado…

End if;

lin_Id_Departamento := lin_Id_Departamento + 1;

End Loop;

En este ejemplo se hacen 3 consultas a la Base de Datos pero en vez de repetir tres veces el Select se encapsula todo dentro de un ciclo WHILE que resulta mucho más eficiente. Nota que la variable lin_Id_Departamento se inicia con el valor 1 y luego se incrementa hasta llegar al valor 3 para que el ciclo termine.

TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”  ¡ Haz Click Aquí y Descárgalo GRATIS Ahora !

Ejemplo #2: Supongamos que se necesita procesar todos los empleados de un departamento, para lo cual se construye un cursor y se utiliza un ciclo WHILE  para leer todos los registros:

/* Procedures en Oracle */

Type reg_Emp Is Record (Rut   T_Empleados.Rut%Type, Nombre   T_Empleados.Nombre%Type,   Edad T_Empleados.Edad%Type);

r_Emp                  reg_Emp;

Cursor  cur_Empleados Is

Select Emp.Rut, Emp.Nombre, Emp.Edad From T_Empleados Emp Where  Emp.Id_Departamento = p_Id_Departamento;

Begin

Open  cur_Empleados;

Fetch cur_Empleados Into r_Emp;

While cur_Empleados%Found Loop

If r_Emp.Edad > 50 Then

… Procesar datos de empleados…

End if;

Fetch cur_Empleados Into r_Emp;

End Loop;

End;

En este ejemplo puedes apreciar varias cosas, primero se está declarando un registro (Record) que permitirá obtener los datos de un cursor, luego se declara un Cursor que consulta todos los empleados de un departamento, después se abre el cursor (Open), se obtiene el primer registro del cursor (Fetch), finalmente utilizamos el ciclo While con la condición cur_Empleados%Found que se lee “Repita este ciclo mientras tenga o existan datos en el cursor”, se procesan los datos de cada empleado, ojo que antes que termine el ciclo While (End Loop) se debe colocar nuevamente el Fetch para que se lea el siguiente registro del cursor, si no colocas este Fetch el ciclo While se quedará en un Loop infinito que nunca terminará y provocará que la Base de Datos se torne muy lenta (el segundo Fetch no se debe olvidar) .

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 Packages en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con Packages en Oracle. Estaré muy atento respondiendo tus preguntas y/o comentarios, gracias.

Saludos

Roberto Vicencio – Escritor del Reporte:

Cómo Construir un SELECT Eficiente en ORACLE en 7 Pasos

Esta entrada fue publicada en Function en Oracle, Packages en Oracle, Procedures en Oracle y etiquetada , , , , , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s