En este módulo, aplicaremos todo lo aprendido en los módulos anteriores a través de estudios de caso del mundo real. Estos estudios de caso están diseñados para consolidar tus conocimientos y mostrar cómo PL/SQL puede ser utilizado para resolver problemas complejos en entornos empresariales.
Estudio de Caso 1: Sistema de Gestión de Inventarios
Descripción del Problema
Una empresa necesita un sistema para gestionar su inventario de productos. El sistema debe permitir:
- Registrar nuevos productos.
 - Actualizar la cantidad de productos en el inventario.
 - Consultar el inventario para verificar la disponibilidad de productos.
 - Generar reportes de productos con bajo stock.
 
Solución Propuesta
Utilizaremos PL/SQL para crear procedimientos almacenados, funciones y disparadores que manejen estas operaciones.
Implementación
1. Crear la Tabla de Productos
CREATE TABLE productos (
    id_producto NUMBER PRIMARY KEY,
    nombre VARCHAR2(50),
    cantidad NUMBER,
    precio NUMBER
);2. Procedimiento para Registrar Nuevos Productos
CREATE OR REPLACE PROCEDURE registrar_producto (
    p_id_producto IN NUMBER,
    p_nombre IN VARCHAR2,
    p_cantidad IN NUMBER,
    p_precio IN NUMBER
) IS
BEGIN
    INSERT INTO productos (id_producto, nombre, cantidad, precio)
    VALUES (p_id_producto, p_nombre, p_cantidad, p_precio);
END;
/3. Procedimiento para Actualizar la Cantidad de Productos
CREATE OR REPLACE PROCEDURE actualizar_cantidad (
    p_id_producto IN NUMBER,
    p_cantidad IN NUMBER
) IS
BEGIN
    UPDATE productos
    SET cantidad = p_cantidad
    WHERE id_producto = p_id_producto;
END;
/4. Función para Consultar la Disponibilidad de un Producto
CREATE OR REPLACE FUNCTION consultar_disponibilidad (
    p_id_producto IN NUMBER
) RETURN NUMBER IS
    v_cantidad NUMBER;
BEGIN
    SELECT cantidad INTO v_cantidad
    FROM productos
    WHERE id_producto = p_id_producto;
    
    RETURN v_cantidad;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        RETURN -1; -- Indica que el producto no existe
END;
/5. Disparador para Notificar Productos con Bajo Stock
CREATE OR REPLACE TRIGGER notificar_bajo_stock
AFTER UPDATE OF cantidad ON productos
FOR EACH ROW
WHEN (NEW.cantidad < 10)
BEGIN
    DBMS_OUTPUT.PUT_LINE('Advertencia: El producto ' || :NEW.nombre || ' tiene bajo stock.');
END;
/6. Generar Reporte de Productos con Bajo Stock
CREATE OR REPLACE PROCEDURE reporte_bajo_stock IS
BEGIN
    FOR r IN (SELECT nombre, cantidad FROM productos WHERE cantidad < 10) LOOP
        DBMS_OUTPUT.PUT_LINE('Producto: ' || r.nombre || ', Cantidad: ' || r.cantidad);
    END LOOP;
END;
/Ejercicio Práctico
- 
Registrar un Nuevo Producto:
- Usa el procedimiento 
registrar_productopara añadir un nuevo producto al inventario. - Ejemplo:
BEGIN registrar_producto(1, 'Laptop', 50, 1000); END; / 
 - Usa el procedimiento 
 - 
Actualizar la Cantidad de un Producto:
- Usa el procedimiento 
actualizar_cantidadpara cambiar la cantidad de un producto existente. - Ejemplo:
BEGIN actualizar_cantidad(1, 5); END; / 
 - Usa el procedimiento 
 - 
Consultar la Disponibilidad de un Producto:
- Usa la función 
consultar_disponibilidadpara verificar la cantidad disponible de un producto. - Ejemplo:
DECLARE v_cantidad NUMBER; BEGIN v_cantidad := consultar_disponibilidad(1); DBMS_OUTPUT.PUT_LINE('Cantidad disponible: ' || v_cantidad); END; / 
 - Usa la función 
 - 
Generar Reporte de Productos con Bajo Stock:
- Usa el procedimiento 
reporte_bajo_stockpara listar los productos con bajo stock. - Ejemplo:
BEGIN reporte_bajo_stock; END; / 
 - Usa el procedimiento 
 
Retroalimentación y Consejos
- 
Errores Comunes:
- No manejar adecuadamente las excepciones, lo que puede llevar a que el sistema falle sin proporcionar información útil.
 - No validar los datos de entrada, lo que puede causar inconsistencias en la base de datos.
 
 - 
Consejos Adicionales:
- Siempre valida los datos de entrada en tus procedimientos y funciones.
 - Utiliza transacciones para asegurar que las operaciones críticas se completen correctamente.
 - Implementa un sistema de logs para rastrear las operaciones y facilitar la depuración.
 
 
Conclusión
En este estudio de caso, hemos creado un sistema básico de gestión de inventarios utilizando PL/SQL. Hemos cubierto la creación de tablas, procedimientos almacenados, funciones y disparadores. Este ejemplo práctico te proporciona una base sólida para desarrollar sistemas más complejos y robustos en el futuro.
Curso de PL/SQL
Módulo 1: Introducción a PL/SQL
Módulo 2: Fundamentos de PL/SQL
- Estructura del Bloque PL/SQL
 - Variables y Tipos de Datos
 - Estructuras de Control
 - Cursores
 - Manejo de Excepciones
 
