--FUNCION AUXILIAR CREATE FUNCTION promedio (@legajo

Anuncio
--FUNCION AUXILIAR
CREATE FUNCTION promedio
(@legajo char(8),
@carrera integer)
RETURNS decimal(3,2)
AS
BEGIN
RETURN (select avg(fin_nota)
from finales
where fin_carrera=@carrera
and fin_legajo=@legajo)
END
--PROCEDIMIENTO PRINCIPAL
CREATE PROCEDURE ejercicio2
AS
begin
declare @dcarrera integer
declare @dlegajo integer
declare @dpromedio decimal(3,2)
declare @dduracion integer
declare @acarrera integer
declare @alegajo integer
declare @apromedio decimal(3,2)
declare @aduracion integer
declare @mejor_prom decimal(3,2)
declare docentes cursor for
select alc_carrera,doc_legajo,dbo.promedio(alu_legajo,alc_carrera),datediff(year,alc_comienzo,alc_fecha_titulo)
from docente,alumno,alumno_carrera
where doc_tipo_documento=alu_tipo_doc
and doc_nro_doc=alu_nro_doc
and alu_legajo=alc_legajo
and alc_fecha_titulo is not null
open docentes
fetch docentes into @dcarrera,@dlegajo,@dpromedio,@dduracion
while @@fetch_status=0
begin
declare alumnos cursor for
select distinct alc_legajo,dbo.promedio(alc_legajo,alc_carrera),datediff(year,alc_comienzo,alc_fecha_titulo)
from alumno_carrera, alumno_curso_materia,curso_materia
where alc_legajo=alcu_legajo
and alc_carrera=alcu_carrera
and alcu_curso=curm_codigo
and alc_fecha_titulo is not null
and alc_carrera=@dcarrera
and curm_docente=@dlegajo
order by 2 desc
open alumnos
fetch alumnos into @alegajo,@apromedio,@aduracion
set @mejor_prom=@apromedio
if @@fetch_status=0
begin
insert into DOCENTE_VS_ALUMNO values(@dcarrera,@dlegajo,@dpromedio,@dduracion,@alegajo,@apromedio,@aduracion)
end
else
begin
insert into DOCENTE_VS_ALUMNO values(@dcarrera,@dlegajo,@dpromedio,@dduracion,null,null,null)
end
fetch alumnos into @alegajo,@apromedio,@aduracion
while @@fetch_status=0 and @mejor_prom=@apromedio
begin
insert into DOCENTE_VS_ALUMNO values(null,null,null,null,@alegajo,@apromedio,@aduracion)
fetch alumnos into @alegajo,@apromedio,@aduracion
end
close alumnos
deallocate alumnos
end
close docentes
deallocate docentes
end
Descargar