A nosotros nos pasaba lo mismo y pude reducir los tiempos de una hora y media a cinco minutos con el siguiente cambio en la ventana w_informacion_academica_becas:
en la funcion wf_cantidad_materias_aprobadas el cambio esta marcado con " //cambia porque tarda demasiado" pero te mando todas las líneas para que no te pierdas:
Long ll_cant_mat_aprobadas_out_cc, ll_cant_mat_aprobadas_2013_out_cc
ll_cant_mat_aprobadas_out_cc = 0
ll_cant_mat_aprobadas_2013_out_cc = 0
ll_cant_mat_aprobadas_out = 0
ll_cant_mat_aprobadas_2013_out = 0
// Recupero cantidad de materias aprobadas por el alumno
// Materias de la version actual del plan del alumno
SELECT COUNT(*), SUM(CASE year(v.fecha) WHEN :ll_anio THEN 1 ELSE 0 END)
INTO :ll_cant_mat_aprobadas_out, :ll_cant_mat_aprobadas_2013_out
FROM sga_alumnos as a,
sga_planes as p,
sga_atrib_mat_plan as atmp,
vw_hist_academica as v
WHERE a.unidad_academica = :ua
AND a.carrera = :carrera
AND a.legajo = :legajo
AND p.unidad_academica = a.unidad_academica
AND p.carrera = a.carrera
AND p.plan = a.plan
AND atmp.unidad_academica = a.unidad_academica
AND atmp.carrera = p.carrera
AND atmp.plan = p.plan
AND atmp.version = p.version_actual
AND v.unidad_academica = a.unidad_academica
AND v.carrera = a.carrera
AND v.legajo = a.legajo
AND v.materia = atmp.materia
AND resultado = 'A'
USING SQLCA;
IF NOT ISNULL(ls_carrera_cc) THEN
// Cuento materias del ciclo comun que no esten contadas por la carrera de grado…
SELECT COUNT(*), SUM(CASE year(vw.fecha) WHEN :ll_anio THEN 1 ELSE 0 END)
INTO :ll_cant_mat_aprobadas_out_cc, :ll_cant_mat_aprobadas_2013_out_cc
FROM sga_alumnos as a,
sga_alumnos as b,
sga_planes as p,
sga_atrib_mat_plan as atmp,
vw_hist_academica as vw
WHERE a.unidad_academica = :ua
AND a.carrera = :carrera
AND a.legajo = :legajo
//cambia porque tarda demasiado
AND b.unidad_academica = a.unidad_academica
AND b.carrera = :ls_carrera_cc
AND b.legajo = a.legajo
AND p.unidad_academica = b.unidad_academica
AND p.carrera = b.carrera
AND p.plan = b.plan
AND atmp.unidad_academica = p.unidad_academica
AND atmp.carrera = p.carrera
AND atmp.plan = p.plan
AND atmp.version = p.version_actual
AND vw.unidad_academica = b.unidad_academica
AND vw.carrera = b.carrera
AND vw.legajo = b.legajo
AND vw.materia = atmp.materia
AND vw.resultado = 'A'
AND vw.materia NOT IN (SELECT vw2.materia
FROM sga_alumnos as c,
sga_planes as p,
sga_atrib_mat_plan as atmp,
vw_hist_academica as vw2
WHERE c.unidad_academica = :ua
AND c.carrera = :carrera
AND c.legajo = :legajo
AND p.unidad_academica = c.unidad_academica
AND p.carrera = c.carrera
AND p.plan = c.plan
AND atmp.unidad_academica = p.unidad_academica
AND atmp.carrera = p.carrera
AND atmp.plan = p.plan
AND atmp.version = p.version_actual
AND vw2.unidad_academica = c.unidad_academica
AND vw2.carrera = c.carrera
AND vw2.legajo = c.legajo
AND vw2.materia = atmp.materia
AND vw2.resultado = 'A')
USING SQLCA;
END IF
IF SQLCA.SQLCode = -1 THEN Return FALSE
// Sumo las materias del ciclo basico
ll_cant_mat_aprobadas_out += ll_cant_mat_aprobadas_out_cc
ll_cant_mat_aprobadas_2013_out += ll_cant_mat_aprobadas_2013_out_cc
if isNull(ll_cant_mat_aprobadas_out) THEN ll_cant_mat_aprobadas_out = 0
if isNull(ll_cant_mat_aprobadas_2013_out) THEN ll_cant_mat_aprobadas_2013_out = 0
Return TRUE