Code icon

MySQL - TRIGGERS TUTORIAS

Links


    // TRIGGERS TUTORIAS


    -- modificar !!
    create trigger trNoModificarMunicipio on Alumno for update
    as
    -- preguntamos el grupo
         declare  @codigoGrupo varchar(6)
         declare @texto varchar(300)
         declare @idAlumno int
         declare @nuevoMunicipio varchar(20)
         set @idAlumno = (select idAlumno from INSERTED)
         set @nuevoMunicipio = (select Municipio from INSERTED)
   
         set @codigoGrupo = (select idGrupo from Alumno)
       if ( @codigoGrupo) = '811NMA' 
       begin
          set @texto = 'El municipio del grupo 811NMA no se puede cambiar'
          raiserror (@texto,16,1)
          rollback transaction
          return
       end
   
     update Alumno set Municipio = @nuevoMunicipio where @idAlumno = @idAlumno
   
   
    go
   
    -- corregido por FERMÍN
   
     create trigger trNoModificarMunicipioFermin on Alumno for update
    as
    -- preguntamos el grupo
         declare  @codigoGrupo varchar(6)
          set @codigoGrupo = (select idGrupo from inserted)
       if ( @codigoGrupo) = '811NMA' AND UPDATE (Municipio) -- poner el update es lo mismo que haber puesto: 
       begin
    
          raiserror ('El municipio del grupo 811NMA no se puede cambiar',16,1)
          rollback transaction
       end
   
   go
   -- otra forma
   
   create trigger trNoModificarMunicipioFermin2 on Alumno for update
    as
    -- preguntamos el grupo
         declare  @codigoGrupo varchar(6)
   
   
         set @codigoGrupo = (select idGrupo from inserted)
       if ( @codigoGrupo = '811NMA' ) AND (select Municipio from inserted) <> (select Municipio from deleted)
       begin
       
          raiserror ('El municipio del grupo 811NMA no se puede cambiar',16,1)
          rollback transaction
       end
   
    -- EJERCICIO 2: CREAR UNA COLUMNA QUE SEA NOTA MEDIA EN LA TABLA DE ASIGNATURA
    -- HACER QUE CADA VEZ QUE SE MODIFICA UNA NOTA SE ACTULICE LA NOTA MEDIA EN ESA ASIGNATURA
   
    -- EL TRIGGER NO DEBE DEJAR CAMBIAR EL IDASIGNATURA CUANDO MODIFICAS
    go
   
    create or alter trigger trActualizarNotaMediaAsignatura on nota for update
   as
       declare @notaMediaAsg float
       declare @idAsignaturaOLD int
       declare @idAsignaturaNEW int
       set @idAsignaturaNEW = (select idAsignatura from inserted)
       set @idAsignaturaOLD = (select idAsignatura from deleted)
   
   
       if ( @idAsignaturaNEW <> @idAsignaturaOLD)
       BEGIN
           raiserror ('El código de la asignatura no se puede cambiar',16,1)
           rollback transaction
           return
       END
       set @notaMediaAsg = (Select AVG(nota * 1.0) from Nota where idAsignatura = @idAsignaturaOLD ) 
       update Asignatura set notaMedia = @notaMediaAsg where idAsignatura = (select idAsignatura from INSERTED)
   go
   
   -- REVISADO POR FERMÍN
   
   
   /*alter table asignatura add Notamedia float */
   
   create or alter trigger trActualizarNotaMediaAsignatura on NOTA for update
   as
       declare @notaMediaAsg FLOAT
       declare @idAsignaturaOLD int
       declare @idAsignaturaNEW int
       set @idAsignaturaNEW = (select idAsignatura from inserted)
       set @idAsignaturaOLD = (select idAsignatura from deleted)
       
   
       if ( @idAsignaturaNEW <>@idAsignaturaOLD)
       BEGIN
           raiserror ('El código de la asignatura no se puede cambiar',16,1)
           rollback transaction
           return
   
       END
       set @notaMediaAsg = (Select AVG(nota * 1.0) from Nota  where idAsignatura=@idAsignaturaOLD ) 
       update Asignatura set notaMedia = @notaMediaAsg where idAsignatura = (select idAsignatura from INSERTED)
   go
   
   -- EJERCICIO 3-- TRIGGER QUE NO DEJE ASIGNAR UN TUTOR A UN GRUPO AL QUE NO DA CLASE
   
   
   -- CORRECCIÓN FERMÍN
   
   create trigger trNoValeComoTutor on grupo for insert, update
   as
       -- quien es el tutor que vas a poner (idprofesor)
       -- no dejarlo grabar si no es profesor de ese grupo = no da clase a ese grupo = no está en la tabla asignaturagrupo
   
       -- lo primero: quien es el tutor que vas a poner (idprofesor)
       DECLARE @idProfesor int
       SET @idProfesor = (select idProfesorTutor from inserted) -- que profesor está poniendo como tutor
   
       -- ahora tenemos que ver si puede o no, si lo dejamos o no
       -- no dejarle grabar si no es profesor de ese grupo = no da clase a ese grupo = no esta en la tabla asignaturagrupo
       -- para el grupo al que intentas ponerlo como tutor
   
   
       
       --if (@idProfesor exists (select @idProfesor from AsignaturasGrupo where idGrupo = AsignaturasGrupo.idGrupo)
       --	BEGIN
       --	raiserror ('Este profesor no da clase a este grupo',16,1)
       --	rollback transaction
       --	return
   
       --END
       -- para la segunda parte
       declare @idgrupo int
       set @idgrupo = (select idgrupo from inserted)  -- a que grupo le pongo este profesor como tutor
   
       IF not exists (SELECT COUNT(*) FROM ASIGNATURASGRUPO WHERE IDPROFESOR =@IDPROFESOR and idGrupo = @idgrupo)  
   
           raiserror ('NO SE PUEDE PONER ESTE PROFESOR COMO TUTOR',16,1)
           rollback transaction
           return
       END
    
   go
   
   
   -- CORRECCIÓN ENTERA DE FERMIN
   
   -- trigger que no deje asignar un tutor a un grupo al que no da clase!!
   create trigger trNoValeComoTutor  on GRUPO  FOR INSERT, UPDATE 
   AS
   
     DECLARE @idProfesor int 
     DECLARE @idGrupo char(6)
   
     set @idProfesor=( select idProfesorTutor from inserted) -- QUE PROFESOR ESTAS PONIENDO COMO TUTOR!!
     set @idGrupo =(select idGrupo from inserted) -- a que grupo le pongo este profesor como tutor.
   
     -- QUIEN ES EL TUTOR QUE VAS A PONER (IDPROFESOR) 
   
     -- NO DEJARLO GRABAR SI NO ES PROFESOR DE ESE GRUPO = NO DA CLASE A ESE GRUPO = NO ESTA EN LA TABLA ASIGANTURASGRUPO
       -- PARA EL GRUPO AL QUE INTENTAS PONERLO COMO TUTOR
   
       IF  not exists(SELECT * FROM ASIGNATURASGRUPO WHERE IDPROFESOR =@IDPROFESOR and idGrupo =@idGrupo )
        begin
            raiserror ('NO SE PUEDE PONER ESTE PROFESOR COMO TUTOR',16,1)
           rollback transaction
       end
   END
   
   GO
   
   -- CREAR TRIGGER QUE NO DEJE QUE UN PROFESOR DE MÁS DE TRES ASIGNATURAS AL MISMO GRUPO
    
   
   
   -- CORRECCIÓN FERMIN
   
   create or alter trigger trnomasde3asignaturas on asignaturasgrupo for insert,update
   
   as
   declare @idprofesor int
   declare @idgrupo char (6)
   
   set @idprofesor=(select idprofesor from inserted)
   set @idgrupo =(select idgrupo from inserted)
   
   if (select count(*) from asignaturasgrupo where idprofesor=@idprofesor and idgrupo=@idgrupo)>3 
   
       begin
        raiserror ('EL PROFESOR NO PUEDE DAR CLASE A MÁS DE TRES ASIGNATURAS',16,1)
        rollback transaction
       end