Ejercicios Triggers y Cursores

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 tcedula
declare 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

  1. 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
  2. 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 cursos

create 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

  1. Realizar un trigger sobre la tabla de cursos impartidos que permita insertar curso con un limite entre 12 y 50 personas
  2. 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
  3. 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