En este artículo, abordaremos la creación de varias funciones, procedimientos y triggers en una base de datos MySQL, diseñados para gestionar y actualizar datos relacionados con una comisaría, cárceles, delincuentes y crímenes.
1. Función que devuelve la cantidad de delincuentes en una cárcel
Esta función recibe el ID de una cárcel y devuelve la cantidad de delincuentes que hay en ella.
CREATE FUNCTION CantidadDelincuentesEnCarcel(id_carcel INT) RETURNS INT
BEGIN
DECLARE cantidad_delincuentes INT;
SELECT COUNT(*) INTO cantidad_delincuentes
FROM delincuentes
WHERE id_carcel = id_carcel;
RETURN cantidad_delincuentes;
END;
2. Función que devuelve la edad de un delincuente introduciendo su nombre
Esta función recibe el nombre de un delincuente y devuelve su edad.
CREATE FUNCTION EdadDelincuentePorNombre(nombre_delincuente VARCHAR(50)) RETURNS INT
BEGIN
DECLARE edad_delincuente INT;
SELECT edad INTO edad_delincuente
FROM delincuentes
WHERE nombre = nombre_delincuente;
RETURN edad_delincuente;
END;
3. Procedimiento para actualizar la gravedad de un crimen
Este procedimiento actualiza la gravedad de un crimen a «ALTA» si el número de muertos es superior a 2.
CREATE PROCEDURE ActualizarGravedadCrimen()
BEGIN
UPDATE crimenes
SET gravedad = 'ALTA'
WHERE num_muertos > 2;
END;
4. Procedimiento para dar de alta un delincuente
Este procedimiento inserta un nuevo delincuente en la base de datos. Si el delincuente ya existe, se muestra un mensaje indicando que ya existe.
CREATE PROCEDURE AltaDelincuente(
IN p_nombre VARCHAR(50),
IN p_apellido VARCHAR(50),
IN p_edad INT,
IN p_genero VARCHAR(10),
IN p_correo VARCHAR(50),
IN p_id_carcel INT
)
BEGIN
DECLARE cantidad_delincuentes INT;
SELECT COUNT(*) INTO cantidad_delincuentes
FROM delincuentes
WHERE nombre = p_nombre AND apellido = p_apellido;
IF cantidad_delincuentes > 0 THEN
SELECT 'El delincuente ya existe' AS mensaje;
ELSE
INSERT INTO delincuentes (nombre, apellido, edad, genero, correo, id_carcel)
VALUES (p_nombre, p_apellido, p_edad, p_genero, p_correo, p_id_carcel);
END IF;
END;
5. Trigger para actualizar la cantidad de delincuentes en una cárcel
Este trigger se activa después de insertar un nuevo delincuente y actualiza la cantidad de delincuentes en la cárcel correspondiente.
CREATE TRIGGER ActualizarCantidadDelincuentesDespuesDeInsertar
AFTER INSERT ON delincuentes
FOR EACH ROW
BEGIN
UPDATE carceles
SET cantidad_delincuentes = cantidad_delincuentes + 1
WHERE id = NEW.id_carcel;
END;
6. Trigger para actualizar la cantidad de inspectores
Este trigger se activa después de eliminar un inspector y actualiza la cantidad de inspectores en la base de datos.
CREATE TRIGGER ActualizarCantidadInspectoresDespuesDeEliminar
AFTER DELETE ON inspectores
FOR EACH ROW
BEGIN
UPDATE crimenes
SET cantidad_inspectores = cantidad_inspectores - 1
WHERE id_inspector = OLD.id;
END;
7. Función para actualizar y devolver el total de munición en un arsenal
Esta función recibe el ID de un arsenal, actualiza la cantidad de munición de todas las armas en ese arsenal y devuelve el total de la munición.
CREATE FUNCTION ActualizarYDevolverMunicionTotal(id_arsenal INT) RETURNS INT
BEGIN
DECLARE municion_total INT;
UPDATE armas
SET municion = municion + 1
WHERE id_arsenal = id_arsenal;
SELECT SUM(municion) INTO municion_total
FROM armas
WHERE id_arsenal = id_arsenal;
RETURN municion_total;
END;
8. Procedimiento para mostrar delincuentes involucrados en crímenes graves
Este procedimiento muestra los nombres y apellidos de los delincuentes involucrados en crímenes cuya gravedad sea alta, concatenados en una sola columna.
CREATE PROCEDURE DelincuentesEnCrimenesGraves()
BEGIN
SELECT CONCAT(nombre, ' ', apellido) AS nombre_completo
FROM delincuentes
WHERE id_crimen IN (
SELECT id
FROM crimenes
WHERE gravedad = 'ALTA'
);
END;
Estos ejemplos muestran cómo usar funciones, procedimientos y triggers en MySQL para gestionar y actualizar datos de una base de datos. Cada uno de estos elementos desempeña un papel crucial en la automatización y mantenimiento de la integridad de los datos.