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