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';

Related entries: