Mostrando entradas con la etiqueta PL/SQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta PL/SQL. Mostrar todas las entradas

sábado, 14 de junio de 2025

Curso de PL/SQL. Sentencia WHILE en PL/SQL de Oracle

La sentencia WHILE en PL/SQL es una estructura de control que permite ejecutar un bloque de código repetidamente mientras se cumpla una condición específica. Es muy útil cuando queremos realizar una serie de operaciones repetitivas hasta que se cumpla una condición de finalización.

¿Qué es la sentencia WHILE en PL/SQL?

La estructura WHILE se utiliza para ejecutar un bloque de código de manera repetitiva mientras una condición específica sea verdadera. Es una estructura de bucle controlado por condición, lo que significa que evalúa la condición al inicio de cada iteración. Si la condición es verdadera, el bloque de código se ejecuta; en caso contrario FALSE, el bucle se detiene y el flujo de control continúa con la siguiente instrucción después del bucle.

 

Sentencia WHILE en PL/SQL de Oracle

Sintaxis de WHILE en PL/SQL

La estructura básica de la sentencia WHILE en PL/SQL es la siguiente:

WHILE condición LOOP

    -- Instrucciones a ejecutar mientras la condición sea verdadera

END LOOP;

Componentes de la estructura WHILE

condición: Una expresión lógica (booleana) que se evalúa antes de cada iteración. Si esta condición es TRUE, el bucle continúa; si es FALSE, el bucle se detiene.

LOOP ... END LOOP: Define el bloque de código que se ejecutará en cada iteración.

Ejemplos Prácticos

A continuación, veremos algunos ejemplos para comprender cómo utilizar la sentencia WHILE en PL/SQL.

Ejemplo 1: Contador sencillo con WHILE

En este ejemplo, usaremos un contador que empieza en 1 y se incrementa en 1 en cada iteración del bucle hasta llegar a 5.

DECLARE

    contador NUMBER := 1;

BEGIN

    WHILE contador <= 5 LOOP

        DBMS_OUTPUT.PUT_LINE('Contador: ' || contador);

        contador := contador + 1;

    END LOOP;

END;

Explicación

1. Definimos una variable contador con un valor inicial de 1.

2. El bucle WHILE evalúa si el valor de contador es menor o igual a 5.

3. Si la condición es TRUE, imprime el valor actual del contador y luego lo incrementa en 1.

4. Una vez que contador supera 5, el bucle termina.

Este código imprimirá lo siguiente:

Contador: 1

Contador: 2

Contador: 3

Contador: 4

Contador: 5

Ejemplo 2: Sumar números del 1 al 10

Este ejemplo muestra cómo podemos utilizar WHILE para sumar los números del 1 al 10.

DECLARE

    suma NUMBER := 0;

    i NUMBER := 1;

BEGIN

    WHILE i <= 10 LOOP

        suma := suma + i;

        i := i + 1;

    END LOOP;

    DBMS_OUTPUT.PUT_LINE('La suma de los números del 1 al 10 es: ' || suma);

END;

Explicación

1. Inicializamos suma en 0, y i en 1.

2. El bucle se ejecuta mientras i sea menor o igual a 10.

3. En cada iteración, i se suma a suma, y luego incrementamos i en 1.

4. Cuando i alcanza 11, el bucle se detiene y el programa imprime el resultado.

Salida:

La suma de los números del 1 al 10 es: 55

Ejemplo 3: WHILE con una tabla de base de datos

En este ejemplo, supongamos que queremos iterar sobre los primeros 10 empleados de una tabla ficticia llamada EMPLEADOS, y queremos mostrar sus nombres. Vamos a utilizar WHILE para controlar el número de iteraciones.

DECLARE

    cursor empleados_cur IS

        SELECT first_name FROM empleados;

    nombre_empleado VARCHAR2(50);

    contador NUMBER := 1;

BEGIN

    OPEN empleados_cur;

    WHILE contador <= 10 LOOP

        FETCH empleados_cur INTO nombre_empleado;

        EXIT WHEN empleados_cur%NOTFOUND;  -- Salir del bucle si no hay más registros

        DBMS_OUTPUT.PUT_LINE('Empleado ' || contador || ': ' || nombre_empleado);

        contador := contador + 1;

    END LOOP;

    CLOSE empleados_cur;

END;

Explicación

1. Definimos un cursor empleados_cur para obtener los nombres de los empleados.

2. Inicializamos contador en 1.

3. Abrimos el cursor y utilizamos FETCH dentro del bucle WHILE para obtener un registro en cada iteración.

4. Con EXIT WHEN empleados_cur%NOTFOUND, salimos del bucle si ya no hay registros que obtener.

5. El contador limita el bucle a los primeros 10 empleados, evitando que el bucle continúe indefinidamente.

Este código imprimirá los nombres de los primeros 10 empleados.

Consideraciones Importantes al Usar WHILE en PL/SQL

1. Condiciones infinitas: Asegúrate de que la condición del WHILE eventualmente se volverá FALSE para evitar bucles infinitos. Una condición infinita puede hacer que el programa nunca termine.

2. Incrementos dentro del bucle: Si estás usando una variable de control (como el contador en los ejemplos), asegúrate de incrementarla dentro del bucle para que se cumpla la condición de salida.

3. Manejo de cursores: Cuando trabajes con cursores dentro de un WHILE, es importante recordar cerrar el cursor después de terminar el bucle.

Conclusión

La sentencia WHILE en PL/SQL es una poderosa herramienta para ejecutar operaciones repetitivas mientras se cumpla una condición. Nos permite iterar sobre valores, realizar cálculos, y manipular datos de forma controlada. Los ejemplos en este artículo te dan una base para entender y aplicar el bucle WHILE en tus proyectos con PL/SQL.


sábado, 12 de abril de 2025

Curso de PL/SQL. Control de Flujo con IF-THEN-ELSE en PL/SQL

En el mundo de PL/SQL, una de las herramientas más importantes para controlar el flujo de nuestro programa es la estructura IF-THEN-ELSE. Esta  permite tomar decisiones dentro de nuestros bloques de código, ejecutando ciertas acciones cuando se cumple una condición y otras cuando no se cumple.

¿Qué es IF-THEN-ELSE?

La estructura IF-THEN-ELSE se utiliza para ejecutar diferentes bloques de código dependiendo del resultado de una condición lógica. Esta estructura es muy similar a la de otros lenguajes de programación, pero se adapta específicamente a las reglas de PL/SQL.

La sintaxis básica es la siguiente:

IF condición THEN

    -- Código a ejecutar si la condición es verdadera

ELSE

    -- Código a ejecutar si la condición es falsa

END IF;

Para hacer el código aún más flexible, PL/SQL también nos ofrece la opción de usar ELSIF si tenemos múltiples condiciones. Esto permite evaluar varias posibilidades de manera ordenada.

Control de Flujo con IF-THEN-ELSE en PL/SQL


Ejemplo Básico de IF-THEN-ELSE

Imaginemos que tenemos una variable que almacena el salario de un empleado, y queremos imprimir un mensaje basado en el valor del salario. El siguiente ejemplo muestra cómo podríamos hacerlo:

DECLARE

    salario NUMBER := 4500;

BEGIN

    IF salario > 5000 THEN

        DBMS_OUTPUT.PUT_LINE('El salario es alto.');

    ELSE

        DBMS_OUTPUT.PUT_LINE('El salario es moderado o bajo.');

    END IF;

END;

En este ejemplo:

  • Si el salario es mayor que 5000, se mostrará el mensaje: "El salario es alto."
  • De lo contrario, se mostrará el mensaje: "El salario es moderado o bajo."

Utilizando ELSIF para Múltiples Condiciones

Si necesitamos evaluar más de dos situaciones, podemos utilizar ELSIF. Imagina que quieres clasificar los salarios en diferentes categorías:

DECLARE

    salario NUMBER := 3500;

BEGIN

    IF salario > 7000 THEN

        DBMS_OUTPUT.PUT_LINE('El salario es muy alto.');

    ELSIF salario BETWEEN 5000 AND 7000 THEN

        DBMS_OUTPUT.PUT_LINE('El salario es alto.');

    ELSIF salario BETWEEN 3000 AND 4999 THEN

        DBMS_OUTPUT.PUT_LINE('El salario es moderado.');

    ELSE

        DBMS_OUTPUT.PUT_LINE('El salario es bajo.');

    END IF;

END;

Aquí hemos introducido múltiples condiciones:

  1. Si el salario es mayor que 7000, mostramos "El salario es muy alto."
  2. Si está entre 5000 y 7000, mostramos "El salario es alto."
  3. Si está entre 3000 y 4999, mostramos "El salario es moderado."
  4. Si no cumple ninguna de las anteriores, mostramos "El salario es bajo."

Ventajas de IF-THEN-ELSE en PL/SQL

  • Claridad: Permite tomar decisiones en el código de una manera lógica y fácil de entender.
  • Flexibilidad: Podemos encadenar múltiples condiciones con ELSIF, lo cual es ideal para manejar varios casos específicos.
  • Control del flujo: Ayuda a controlar qué se ejecuta y cuándo, en función de las condiciones dadas.

Ejemplo con Variables de Base de Datos

Podemos hacer un ejemplo un poco más avanzado usando datos que provienen de una tabla. Supongamos que tenemos una tabla llamada empleados y queremos clasificar a los empleados según sus años de antigüedad.

DECLARE

    v_antiguedad NUMBER;

BEGIN

    -- Supongamos que estamos seleccionando a un empleado con ID = 101

    SELECT antiguedad INTO v_antiguedad FROM empleados WHERE empleado_id = 101;

   

    IF v_antiguedad > 10 THEN

        DBMS_OUTPUT.PUT_LINE('El empleado tiene alta antigüedad.');

    ELSIF v_antiguedad BETWEEN 5 AND 10 THEN

        DBMS_OUTPUT.PUT_LINE('El empleado tiene antigüedad moderada.');

    ELSE

        DBMS_OUTPUT.PUT_LINE('El empleado es relativamente nuevo.');

    END IF;

END;

En este ejemplo, estamos consultando la antigüedad de un empleado y mostrando un mensaje basado en la cantidad de años que ha trabajado en la empresa. El uso de IF-THEN-ELSE nos permite decidir qué mensaje mostrar dependiendo del valor de v_antiguedad.

Conclusión

La estructura IF-THEN-ELSE en PL/SQL es fundamental para controlar la lógica y el flujo de nuestros programas. Nos permite tomar decisiones y actuar en función de los datos que tenemos disponibles. Ya sea que estemos trabajando con simples valores de variables o con datos provenientes de la base de datos, esta herramienta es esencial para escribir código eficiente y efectivo.