¿Cuándo se debe usar el ciclo FOR en los Packages en Oracle?

Aprender a tomar la decisión de tener que usar un Ciclo FOR es muy importante para poder desarrollar Procedures en Oracle  y Function en Oracle  que sean eficientes al momento de manipular los datos, que los procesos resuelvan los datos rápidamente y se puedan aplicar criterios y validaciones a una gran cantidad de datos.

El ciclo FOR permite básicamente repetir un mismo proceso más de una vez de forma controlada, es decir, yo puedo programar un ciclo FOR para que se repita 5, 10 o 1000  veces si es necesario. Ahora te debes preguntar ¿De qué me sirve que un proceso se repita muchas 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 FOR, para entenderlo mejor veamos algunos ejemplos que sean 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 */

For v_Id_Dep In 1..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 = v_Id_Dep;

If l_Edad > 40 Then

… Procesar datos del empleado…

End if;

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 FOR que resulta mucho más eficiente.

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:

/* Procedures en Oracle */

For v_Reg In (   Select Emp.Rut, Emp.Nombre, Emp.Edad From T_Empleados Emp             Where  Emp.Id_Departamento = p_Id_Departamento) Loop

If v_Reg.Edad > 50 Then

… Procesar datos de empleados…

End if;

End Loop

En este ejemplo se están procesando todos los empleados de un departamento, para ello se está usando un ciclo FOR que contiene un  CURSOR  implícito dentro, este ciclo For se repetirá por cada empleado que se encuentre en el departamento, el ciclo termina una vez que se procese el último empleado que entregue la consulta.

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 Packages en Oracle y etiquetada , , , , , . Guarda el enlace permanente.

4 respuestas a ¿Cuándo se debe usar el ciclo FOR en los Packages en Oracle?

  1. edwin mejia dijo:

    me gustaria saber con un for como puedo recorrer una cadena de caracteres para desglosar letra por letra para luego ingresar en un if cada letra y ejecer uan accion dependiendo la que es quiero saber como puedo hacer esto

    • Hola Edwin, para recorrer una cadena de texto puedes hacerlo de la siguiente forma:

      declare
      lst_texto varchar2(100):= ‘MI CADENA DE TEXTO’;
      lst_letra varchar2(1);
      begin
      dbms_output.put_line(‘Lectura normal:’);
      for lin_pos in 1..length(lst_texto) loop
      lst_letra:= substr(lst_texto,lin_pos,1);
      if lst_letra = ‘M’ then
      dbms_output.put_line(lst_letra);
      else
      dbms_output.put_line(lst_letra);
      end if;
      end loop;
      dbms_output.put_line(‘ ‘);
      dbms_output.put_line(‘Lectura al revés:’);
      for lin_pos in reverse 1..length(lst_texto) loop
      lst_letra:= substr(lst_texto,lin_pos,1);
      if lst_letra = ‘M’ then
      dbms_output.put_line(lst_letra);
      else
      dbms_output.put_line(lst_letra);
      end if;
      end loop;
      end;
      /

      Espero te sirva esto, si tienes mas consultas no dudes en preguntar.

      Saludos
      Roberto Vicencio

  2. Mar Ian dijo:

    buenas buenas ….tengo un problema q me esta volviendo loca……. dice: mostrar el nombre y usuario de los empleados cuyos usuarios tengan EXACTAMENTE 2 letras “a” … mi tabla es s_emp, mis usuarios son userid, y mis nombres son first_name ……. osea lo q deberia mostrar es : first_name= jorge; userid= amaro, con 2 ‘a’ no importa el orden de las “a” solo q sean EXACTAMENTE 2 …….. como puedo hacerlo!!! por favor ayuda!!

    • Hola Marlan, gracias por comunicarte, en principio este problema puede parecer algo difícil de resolver, pero si conoces algunas funciones de Oracle como la InStr puede resultar muy fácil de solucionar, esta función permite buscar un texto dentro de otro texto y recibe como parámetro las repeticiones que quieres buscar (cuarto parámetro), mira como lo resolví:

      Select first_name, userid
      From s_emp
      where InStr(userid,’a’, 1, 2) > 0 — Aqui busco todos los usuarios que al menos tengan 2 letras a.
      and InStr(userid,’a’, 1, 3) = 0 — Aqui me aseguro que no tenga 3 o mas letras a.

      PD: Ya obtuviste mi reporte gratuito sobre ‘Cómo Construir un SELECT Eficiente en Oracle en Solo 7 Pasos’, si aún no lo haces puedes obtenerlo Gratis desde este link:
      http://dominatuspackagesenoracle.com

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

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