145 - Disparadores (varios eventos)


Hemos aprendido a crear disparadores para diferentes eventos (insert, update y delete).
Dijimos que un disparador puede definirse para más de una acción; en tal caso, deben separarse con comas.

Creamos un trigger para evitar que se inscriban socios que deben matrículas y no permitir que se eliminen las inscripciones de socios deudores. El trigger se define para ambos eventos en la misma sentencia de creación.

 create trigger dis_inscriptos_insert_delete
  on inscriptos
  for insert,delete
  as
   if exists (select *from inserted join morosos 
              on morosos.documento=inserted.documento)
   begin
     raiserror('El socio es moroso, no puede inscribirse en otro curso', 16, 1)
     rollback transaction
   end
   else
     if exists (select *from deleted join morosos
	        on morosos.documento=deleted.documento)
     begin
       raiserror('El socio debe matriculas, no puede borrarse su inscripcion', 16, 1)
       rollback transaction
     end
     else
      if (select matricula from inserted)='n'
       insert into morosos select documento from inserted;

El trigger controla:

- si se intenta ingresar una inscripción de un socio moroso, se deshace la transacción;

- si se intenta eliminar una inscripción de un socio que está en "morosos", se deshace la transacción;

- si se ingresa una nueva inscripción y no se paga la matrícula, dicho socio se ingresa a la tabla "morosos".


Retornar