Implementación de Triggers SQL para Gestión de Prácticas y Vehículos
Classified in Computers
Written on in
English with a size of 4.17 KB
Tarea 1: Registrar Kilometraje por Práctica Insertada
Requisito: Crear un TRIGGER donde, cada vez que se inserta una práctica a un alumno, se deben sumar 50 KMS al vehículo que tiene asignado el alumno.
Definición del Trigger PRAC (Inserción de Práctica)
CREATE TRIGGER PRAC
ON PRACTICA
FOR INSERT
AS
DECLARE @CODMON INT;
DECLARE @CODAL INT;
-- 1. Obtener el ID del Monitor asignado al Alumno de la práctica insertada
SELECT @CODAL = A.CodMon#
FROM ALUMNO A
INNER JOIN INSERTED I ON A.CodAl# = I.CodAl#;
-- Nota: La siguiente selección es redundante o lógicamente incorrecta en este contexto:
-- SELECT @CODMON = M.CodMon#
-- FROM MONITOR M
-- INNER JOIN ALUMNO A ON M.CodMon# = A.CodAl#
-- WHERE M.CodMon# = @CODMON;
-- 2. Actualizar los kilómetros del coche asignado al monitor
UPDATE COCHE
SET KMS += 50 -- Corregido: Se suman 50 KMS (Originalmente restaba 50)
WHERE CodCoche# = (
SELECT CodCoche#
FROM MONITOR
WHERE CodMon# = @CODAL
);
Tarea 2: Inicialización de Kilometraje al Asignar Vehículo a Monitor
Requisito: Crear un TRIGGER que, al asignar un coche a un monitor (mediante la inserción en la tabla MONITOR), ponga sus kilómetros a 0.
Definición del Trigger T1 (Asignación de Coche)
CREATE TRIGGER T1
ON MONITOR
FOR INSERT
AS
UPDATE COCHE
SET KMS = 0
WHERE CodCOCHE# = (
SELECT CodCOCHE#
FROM inserted
);
Ejemplo de Inserción
INSERT INTO MONITOR VALUES(50, '45421454s', 'LUIS', 'ESTRELLA', '10-1-1889', '658974521', 15);
Tarea 3: Ajuste de Kilometraje por Eliminación de Práctica
Requisito: Crear un TRIGGER para que, al borrar una práctica, se resten 75 KMS al coche asociado.
Definición del Trigger EJ3 (Eliminación de Práctica)
Nota: Se utiliza ALTER TRIGGER. Se corrigen los operadores LIKE por = para IDs numéricos.
ALTER TRIGGER EJ3
ON PRACTICA
FOR DELETE
AS
DECLARE @COD_A INT;
DECLARE @COD_M INT;
-- 1. Obtener el ID del Alumno (COD_A) de la práctica eliminada
SELECT @COD_A = A.COD_A
FROM ALUMNO A
INNER JOIN DELETED D ON A.COD_A = D.COD_A;
-- 2. Obtener el ID del Monitor (COD_MON) asociado a ese Alumno
SELECT @COD_M = M.COD_MON
FROM MONITOR M
INNER JOIN ALUMNO A ON M.COD_MON = A.COD_MON
WHERE A.COD_A = @COD_A;
-- 3. Actualizar los kilómetros del coche asignado al monitor
UPDATE COCHE
SET KMS -= 75
WHERE COD_COCHE = ( -- Corregido: Usando = en lugar de LIKE
SELECT COD_COCHE
FROM MONITOR
WHERE COD_MON = @COD_M -- Corregido: Usando = en lugar de LIKE
);
Ejemplo de Eliminación
DELETE FROM PRACTICA
WHERE FECHA_PRAC LIKE '2012-05-24';
Tarea 4: Validación de Asignación de Coche en Actualización de Monitor
Requisito: Trigger para la actualización de monitor. Si el coche que se le ha puesto ya está asignado a otro monitor, se debe deshacer la operación (rollback).
Código Duplicado del Trigger EJ3 (Mantenido según la fuente original)
Nota: El código proporcionado a continuación es una repetición exacta del Trigger EJ3 (DELETE en PRACTICA) y no corresponde al requisito de UPDATE en MONITOR. Se mantiene el contenido original sin modificar ni eliminar.
ALTER TRIGGER EJ3
ON PRACTICA
FOR DELETE
AS
DECLARE @COD_A INT;
DECLARE @COD_M INT;
SELECT @COD_A = A.COD_A
FROM ALUMNO A
INNER JOIN DELETED D ON A.COD_A = D.COD_A;
SELECT @COD_M = M.COD_MON
FROM MONITOR M
INNER JOIN ALUMNO A ON M.COD_MON = A.COD_MON
WHERE A.COD_A = @COD_A;
UPDATE COCHE
SET KMS -= 75
WHERE COD_COCHE = (
SELECT COD_COCHE
FROM MONITOR
WHERE COD_MON = @COD_M
);
Ejemplo de Eliminación (Duplicado)
DELETE FROM PRACTICA
WHERE FECHA_PRAC LIKE '2012-05-24';