Creación y Uso de Procedimientos Almacenados en MySQL utilizando la Base de Datos «Comisaria»

Los procedimientos almacenados en MySQL son una herramienta poderosa que permite la ejecución de secuencias predefinidas de comandos SQL, lo que facilita la automatización y estandarización de tareas repetitivas y complejas. En este artículo, exploraremos la creación de varios procedimientos almacenados utilizando la base de datos de una comisaría como ejemplo.

Creación de la Base de Datos y Tablas

Comenzamos con la creación de la base de datos y las tablas necesarias para nuestro ejemplo:

CREATE DATABASE Comisaria;
USE Comisaria;

-- Tabla de agentes
CREATE TABLE Agentes (
    id_agente INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL,
    rango VARCHAR(30),
    salario DECIMAL(10, 2) NOT NULL,
    fecha_ingreso DATE
);

-- Tabla de ciudadanos
CREATE TABLE Ciudadanos (
    id_ciudadano INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL,
    direccion VARCHAR(100),
    telefono VARCHAR(15)
);

-- Tabla de casos
CREATE TABLE Casos (
    id_caso INT AUTO_INCREMENT PRIMARY KEY,
    descripcion TEXT,
    fecha_inicio DATE,
    estado VARCHAR(20),
    id_agente INT,
    FOREIGN KEY (id_agente) REFERENCES Agentes(id_agente)
);

-- Tabla de reportes
CREATE TABLE Reportes (
    id_reporte INT AUTO_INCREMENT PRIMARY KEY,
    id_caso INT,
    id_ciudadano INT,
    descripcion TEXT,
    fecha_reporte DATE,
    FOREIGN KEY (id_caso) REFERENCES Casos(id_caso),
    FOREIGN KEY (id_ciudadano) REFERENCES Ciudadanos(id_ciudadano)
);

-- Insertar datos en la tabla Agentes
INSERT INTO Agentes (nombre, rango, salario, fecha_ingreso) VALUES
('Juan Pérez', 'Sargento', 45000.00, '2015-06-23'),
('Ana Gómez', 'Teniente', 50000.00, '2018-09-15'),
('Carlos López', 'Cabo', 40000.00, '2020-01-10');

-- Insertar datos en la tabla Ciudadanos
INSERT INTO Ciudadanos (nombre, direccion, telefono) VALUES
('Pedro Martínez', 'Calle Falsa 123', '555-1234'),
('María Fernández', 'Avenida Siempre Viva 742', '555-5678'),
('Luis García', 'Boulevard Central 456', '555-8765');

-- Insertar datos en la tabla Casos
INSERT INTO Casos (descripcion, fecha_inicio, estado, id_agente) VALUES
('Robo en tienda', '2022-03-10', 'Abierto', 1),
('Asalto a mano armada', '2022-04-22', 'Cerrado', 2),
('Vandalismo en parque', '2022-05-15', 'En Proceso', 3);

-- Insertar datos en la tabla Reportes
INSERT INTO Reportes (id_caso, id_ciudadano, descripcion, fecha_reporte) VALUES
(1, 1, 'Robo de mercancía en tienda', '2022-03-10'),
(2, 2, 'Asalto a mano armada en banco', '2022-04-22'),
(3, 3, 'Daños en parque público', '2022-05-15');

Procedimientos Almacenados en MySQL

1. Procedimiento para Agregar un Nuevo Agente

Este procedimiento añade un nuevo agente a la tabla Agentes.

DELIMITER //

CREATE PROCEDURE AddAgente(
    IN p_nombre VARCHAR(50),
    IN p_rango VARCHAR(30),
    IN p_salario DECIMAL(10, 2),
    IN p_fecha_ingreso DATE
)
BEGIN
    INSERT INTO Agentes (nombre, rango, salario, fecha_ingreso) 
    VALUES (p_nombre, p_rango, p_salario, p_fecha_ingreso);
END //

DELIMITER ;

Para llamar a este procedimiento y añadir un nuevo agente, usaríamos:

CALL AddAgente('Laura Torres', 'Capitán', 55000.00, '2021-03-14');

2. Procedimiento para Actualizar el Estado de un Caso

Este procedimiento actualiza el estado de un caso específico en la tabla Casos.

DELIMITER //

CREATE PROCEDURE UpdateEstadoCaso(
    IN p_id_caso INT,
    IN p_nuevo_estado VARCHAR(20)
)
BEGIN
    UPDATE Casos
    SET estado = p_nuevo_estado
    WHERE id_caso = p_id_caso;
END //

DELIMITER ;

Para llamar a este procedimiento y actualizar el estado de un caso, usaríamos:

CALL UpdateEstadoCaso(1, 'Cerrado');

3. Procedimiento para Generar un Informe de Casos por Agente

Este procedimiento genera un informe de todos los casos asignados a un agente específico.

DELIMITER //

CREATE PROCEDURE InformeCasosPorAgente(
    IN p_id_agente INT
)
BEGIN
    SELECT c.id_caso, c.descripcion, c.fecha_inicio, c.estado
    FROM Casos c
    WHERE c.id_agente = p_id_agente;
END //

DELIMITER ;

Para llamar a este procedimiento y generar un informe de casos para un agente, usaríamos:

CALL InformeCasosPorAgente(1);

4. Procedimiento para Eliminar un Reporte

Este procedimiento elimina un reporte específico de la tabla Reportes.

DELIMITER //

CREATE PROCEDURE DeleteReporte(
    IN p_id_reporte INT
)
BEGIN
    DELETE FROM Reportes
    WHERE id_reporte = p_id_reporte;
END //

DELIMITER ;

Para llamar a este procedimiento y eliminar un reporte, usaríamos:

CALL DeleteReporte(1);

Conclusión

Los procedimientos almacenados en MySQL permiten la ejecución de secuencias de comandos SQL de manera automatizada y eficiente. En este artículo, hemos creado varios procedimientos utilizando la base de datos de una comisaría, demostrando cómo se pueden añadir nuevos agentes, actualizar el estado de casos, generar informes y eliminar reportes de manera sencilla y estructurada. Los procedimientos almacenados no solo mejoran la eficiencia de la base de datos sino que también aseguran la consistencia y la integridad de los datos a lo largo del tiempo.

person encoding in laptop
Photo by Lukas on Pexels.com

Deja un comentario

Información básica sobre protección de datos Ver más

  • Responsable: Tomas Gonzalez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

error: Content is protected !!

Descubre más desde InfoGonzalez - Blog de formador e informático

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo

Este sitio web utiliza cookies, si necesitas más información puedes visitar nuestra política de privacidad    Ver
Privacidad
Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.