Documentos de Académico
Documentos de Profesional
Documentos de Cultura
as if update(documento) begin raiserror('No puede modificar el documento de los empleados', 16, 1) rollback transaction end; 1.5. Crear un Trigger para que no permita ingresar empleados en la seccin "Gerencia": create trigger dis_empleados_insertar on empleados for insert as if (select seccion from inserted)='Gerencia' begin raiserror('No puede ingresar empleados en la seccin "Gerencia".', 16, 1) rollback transaction end; 1.6. Intentar borrar varios empleados: delete from empleados where domicilio like 'Bulnes%';
El trigger se dispara, muestra el mensaje y deshace la transaccin.
1.7. Deshabilitar el trigger para el evento de eliminacin: alter table empleados disable trigger dis_empleados_borrar; 1.8. Borrar varios empleados: delete from empleados where domicilio like 'Bulnes%';
El trigger no se dispar porque est deshabilitado. Podemos verificar que los registros de eliminaron recuperando los datos de la tabla:
select *from empleados; 1.9. Intentar modificar un documento: update empleados set documento='23030303' where documento='23333333';
El trigger se dispara, muestra el mensaje y deshace la transaccin.
1.10. Intentar ingresar un nuevo empleado en "Gerencia": insert into empleados values('28888888','Juan Juarez','Jamaica 123','Gerencia');
El trigger se dispara, muestra el mensaje y deshace la transaccin.
1.11. Deshabilitar los Trigger s de insercin y actualizacin definidos sobre "empleados": alter table empleados disable trigger dis_empleados_actualizar, dis_empleados_insertar; 1.12. Ejecutamos la sentencia de actualizacin del documento: update empleados set documento='200004'
where documento='244444';
El trigger no se dispara porque est deshabilitado, el documento se actualiz. verifiqumoslo:
select *from empleados; 1.13. Ingresar un nuevo empleado en "Gerencia": insert into empleados values('28888888','Juan Juarez','Jamaica 123','Gerencia');
El trigger "dis_empleados_insertar" no se dispara porque est deshabilitado, el registro se agreg a la tabla. verifiqumoslo:
select *from empleados; 1.14. Habilitar todos los triggers de la tabla "empleados": alter table empleados enable trigger all; Ya no podemos eliminar ms de un registro, actualizar un documento ni ingresar un empleado en la seccin "Gerencia"; lo intentamos: update empleados set documento='30000000' where documento='288888'; El trigger se dispara (est habilitado), muestra el mensaje y deshace la transaccin.
----------
Codigo de la materia ofertada Sigla de la materia ofertada Grupo Semestre Anio Horas Teoricas a la Semana Horas Practicas a la Semana Cupo ofertado Total Inscrito, se actualiza cuando se -- inserta/elimina una fila en notas
) create unique index idx_materia on materia(sigla,grupo,sem,anio) create table horarios ( code int not null, -- Codigo de la Materia Ofertada dia int not null, -- Dia de la semana (1=Lun,2=Mar,...7=Dom) horai decimal(12,2), -- Hora de inicio de la clase horaf decimal(12,2), -- Hora de final de la clase aula char(10), -- Aula donde se pasara la clase (214-24, 21425,...) foreign key (code) references materia ) create table notas ( registro int not null, -- Numero de registro del Estudiante code int not null, -- Codigo de la materia ofertada inscrita nota int , -- Nota de la materia estado int not null, -- 0=Inscrita, 1=Con Nota primary key (registro,code), foreign key (code) references materia )
END
ROLLBACK RETURN
16, 1)
EXEC PA_Hora60min @horai,@horaf,@valido OUTPUT IF @valido=0 BEGIN RAISERROR('La hora no tiene 60 minutos o multiplos!!!!...', ROLLBACK RETURN END EXEC PA_DiaValidos @dia,@valido OUTPUT IF @valido=0 BEGIN RAISERROR('El dia no es valido!!! ...', 16, 1) ROLLBACK RETURN END
Ejecutar las siguiente isntrucciones para verificar la funcionalidad de los TRIGGER's y PA's creados. insert into materia values(1,'INF120','X',2,2012,3,3,4,0) insert into materia values(2,'INF220','A',2,2012,3,3,4,0) insert into horarios values(1,1,07.00,09.00,'214-16') insert into horarios values(1,3,07.00,09.00,'214-16') insert into horarios values(1,5,07.00,09.00,'214-16') insert into horarios values(2,2,07.15,09.00,'214-22') insert into horarios values(2,4,22.00,24.67,'214-22') insert into horarios values(2,9,07.00,09.00,'214-22') -- debe dar error -- debe dar error -- debe dar error
3.2. Hacer un trigger que al momento de insertar una fila en la tabla notas, valide si existe cupo disponible en la tabla materia, si no existe cupo disponible que muestre un mensaje 'No hay cupos' y cancele la insersion en la tabla notas. Si existe cupo disponible que incremente en 1 el campo insc de la tabla materia. NOTA: Cupo Disponible = (Cupo - Insc) y debe ser mayor a cero. -- DROP TRIGGER ti_notas CREATE TRIGGER ti_notas ON notas FOR INSERT AS DECLARE @code INT, @cupo_disp INT SELECT @code=code FROM INSERTED SELECT @cupo_disp=cupo-insc FROM materia WHERE @code=code IF @cupo_disp<=0 BEGIN RAISERROR('No existe cupo disponible ...', 16, 1) ROLLBACK RETURN END UPDATE materia SET insc = insc + 1 WHERE @code=code Ejecutar las siguiente isntrucciones para verificar la funcionalidad de los TRIGGER's y PA's creados insert insert insert insert insert into into into into into notas notas notas notas notas values(4046501,1,null,0) values(4046501,2,null,0) values(4046503,2,null,0) values(4046504,2,null,0) values(4046505,2,null,0)
select * from materia insert into notas values(4046508,2,null,0) -- debe dar error
3.4. Hacer un trigger que al momento de eliminar una fila en la tabla notas, que decremente en 1 el campo insc de la tabla materia. -- DROP TRIGGER td_notas
CREATE TRIGGER td_notas ON notas AFTER DELETE AS UPDATE materia SET insc = insc - (select count(*) FROM DELETED WHERE materia.code=DELETED.code) Ejecutar las siguiente isntrucciones para verificar la funcionalidad de los TRIGGER's y PA's creados select * from materia delete from notas where code=2 select * from materia select * from notas