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
