Ejemplo sobre cursores
El siguiente ejemplo permite calcular la cantidad de cursos aprobados y reprobados por cada estudiante registrado
Se deben realizar previo las siguientes modificaciones para aplicarlo en el ejercicio:
alter table estudiantes add cursos_aprobados int
alter table estudiantes add cursos_reprobados int
Ejemplo:
declare @cedula tceduladeclare calcular_aprob_reprob cursor
for select cedula from estudiantes
--for update of carrera
open calcular_aprob_reprob
fetch next from calcular_aprob_reprob into @cedula
while @@fetch_status=0
begin
declare @c_a int
declare @c_r int
set @c_a=(select count (ci.nota)
from (estudiantes e
inner join matricula m
on e.cedula=m.cedula)
inner join cursos_matriculados ci
on m.id_matricula=ci.id_matricula
where e.cedula=@cedula and nota>=70)
set @c_r=(select count (ci.nota)
from (estudiantes e
inner join matricula m
on e.cedula=m.cedula)
inner join cursos_matriculados ci
on m.id_matricula=ci.id_matricula
where e.cedula=@cedula and nota<70)
update estudiantes
set cursos_aprobados=@c_a,
cursos_reprobados=@c_r
where cedula=@cedula
fetch next from calcular_aprob_reprob into @cedula
print @cedula
end
close calcular_aprob_reprob
deallocate calcular_aprob_reprob
Ejercicios
- Agregar las columnas: porcentaje de aprobación y reprobación a la tabla de cursos_impartidos y por medio de un cursor calcular estos valores para todos los cursos que se han impartido
- Crear un cursor para la tabla teléfonos que elimine y reasocie los números de telefónicos iguales. Por ejemplo si Oscar Víquez y Leonardo Víquez tiene el mismo número residencial, elimine uno de los dos y el que quedó en la base de datos debe reasociarlo con la persona que perdió la referencia telefónica.
Ejemplo sobre Triggers
El siguiente ejemplo permite verificar si al momento de insertar un curso impartido el profesor del mimo no tenga asignados ya más de dos cursoscreate trigger veridicar_maximo_cursos_profesor
on cursos_impartidos
for insert
as
declare @profesor tcedula
declare @semestre int
declare @anno int
declare @cant_cursos int
set @profesor=(select cedula_profesor from inserted)
set @semestre=(select semestre from inserted)
set @anno=(select anno from inserted)
set @cant_cursos=(
select count(id_curso_impartido)
from cursos_impartidos ci inner
join profesores p
on ci.cedula_profesor=p.cedula
where semestre=@semestre and
anno=@anno and cedula=@profesor
)
if (@cant_cursos<=3)
begin
print ('curso insertado!')
commit tran
end
else
begin
print ('El profesor debe tener un máximo de tres cursos
asignados por semestre!')
rollback tran
end
Ejercicios sobre triggers
- Realizar un trigger sobre la tabla de cursos impartidos que permita insertar curso con un limite entre 12 y 50 personas
- Realizar un trigger sobre la tabla de cursos matriculados de forma tal que verifique que un estudiante no matricule más de 18 creditos por semestre
- Realizar un trigger sobre la tabla de cursos matriculados de forma tal que verifique un curso no exeda el cupo definido en la tabla cursos impartidos.
No hay comentarios:
Publicar un comentario