Error Stored Procedure

Estimados, estoy modificando el stored procedure sp842_fichalupers. El mismo me genera una lista con los alumnos que tienen aprobada un cierto porcentaje de la carrera. Este porcentaje lo calcula, a grandes rasgos dividiendo la cantidad de materias aprobadas/la cantidad de materias del plan de estudio.
Lo que yo necesito modificar, es que no tome todas las materias aprobadas (normales, optativas de la ficha del alumno), sino que me tome las normales mas las genéricas como cantidad de materias aprobadas. Por esta razón agregue al mismo otro procedimiento que me cuenta las materias genéricas que tiene aprobadas un alumno…y se las suma a la cantidad de materias normales aprobadas…
Lo que pasa que cuando lo ejecuto, me dice que el stored procedure que agregue devuelve mas de una fila, necesito saber si alguien sabe como corregirlo para que no me salga este error.
estos son los storeds…
drop PROCEDURE “dba”.sp842_fichalupers;
CREATE PROCEDURE “dba”.sp842_fichalupers( pUnidadAcademica LIKE sga_personas.unidad_academica,
pcarrera Like sga_carreras.carrera,
pplan like sga_planes.plan ,
pporcentaje integer)
RETURNING varchar(5), varchar(15),varchar(5), varchar(30), varchar(30), date,varchar(100),integer, integer, integer;
– Descripcion del Return:
–varchar(5), – vc_UA,
–varchar(15), – vc_Legajo,
–varchar(5), – vc_Carrera,
–varchar(30), – vc_Nombres,
–varchar(30), – vc_Apellido,
–date, --vc_FechaIngreso
–varchar(100), – vc_CarreraNombre,
–integer , pporcentaje

– Definición de Variables.
DEFINE vi_retorno SMALLINT;
DEFINE vc_Legajo LIKE sga_alumnos.legajo;
DEFINE vc_nombres LIKE sga_personas.nombres;
DEFINE vc_apellido LIKE sga_personas.apellido;

DEFINE vc_FechaIngreso LIKE dba.sga_alumnos.fecha_ingreso;
DEFINE vc_CarreraNombre LIKE sga_carreras.nombre;

DEFINE vc_CantMaterias integer;
DEFINE vc_CantMatplan integer;
DEFINE vc_mat_equiv integer;
DEFINE vc_mat_gener integer;
–DEFINE vc_cant_gener integer;

BEGIN

– inicializaciones.
LET vc_Legajo = NULL;
LET vc_nombres = NULL;
LET vc_apellido = NULL;
LET vc_FechaIngreso = NULL;
LET vc_CarreraNombre = NULL;
LET vc_CantMaterias = 0;
LET vc_mat_equiv = NULL;
LET vc_mat_gener = 0;
–LET vc_cant_gener = 0;

–Obtiene la cantidad de materias aprobadas
FOREACH
SELECT dba.sga_alumnos.legajo,
dba.sga_alumnos.fecha_ingreso ,
dba.sga_carreras.nombre,
dba.sga_personas.apellido,
dba.sga_personas.nombres,
dba.sga_planes.cnt_materias,
count(dba.sga_alumnos.legajo)
INTO vc_legajo,
vc_FechaIngreso,
vc_CarreraNombre,
vc_apellido,
vc_nombres,
vc_CantMatplan,
vc_CantMaterias
from dba.vw_hist_academica,dba.sga_alumnos,dba.sga_planes,sga_carreras,sga_personas
where vw_hist_academica.resultado=‘A’
and vw_hist_academica.carrera =pcarrera
and vw_hist_academica.legajo=sga_alumnos.legajo
and vw_hist_academica.carrera=sga_alumnos.carrera
and sga_planes.plan=pplan
and sga_alumnos.carrera=pcarrera
and sga_alumnos.carrera=sga_carreras.carrera
and sga_alumnos.nro_inscripcion=sga_personas.nro_inscripcion
group by
dba.sga_alumnos.legajo,
dba.sga_alumnos.fecha_ingreso,
dba.sga_carreras.nombre,
dba.sga_personas.apellido,
dba.sga_personas.nombres,
dba.sga_planes.cnt_materias

    --Obtiene las materias pasadas por equivalencia
    select count (materia) 
    into vc_mat_equiv
    from sga_equiv_relacion 
    where sga_equiv_relacion.legajo=vc_legajo           
    and sga_equiv_relacion.carrera=pcarrera;

    --Al total de materias aprobadas se le resta las pasadas por equivalencia
    LET vc_CantMaterias=vc_CantMaterias - vc_mat_equiv;

Codigo Personalizado**************************************************************************************************************************
–FOREACH
EXECUTE PROCEDURE “dba”.sp842_GenericasPlan( pUnidadAcademica, pcarrera, pplan, vc_legajo) INTO vc_mat_gener;
–END FOREACH;

–************************************************************************************************************************************************************
–LET vc_cant_gener= CONVERT(integer, vc_mat_gener);
LET vc_CantMaterias=vc_CantMaterias + vc_mat_gener;

    --Si cumple con el porcentaje retorna los datos del alumno
     IF ((vc_CantMaterias/vc_CantMatPlan)*100)  > pporcentaje  then
            RETURN pUnidadAcademica, vc_Legajo, pcarrera,vc_Nombres, vc_Apellido,vc_FechaIngreso , vc_CarreraNombre, vc_CantMaterias, vc_CantMatplan, pporcentaje   WITH RESUME; 
     END IF;

END FOREACH;

END;

END PROCEDURE
;

EXECUTE PROCEDURE “dba”.sp842_fichalupers( ‘UACO’, ‘048’, ‘048P3’, 70);

–DROP TABLE tmp_materia_porcen;

drop PROCEDURE “dba”.sp842_GenericasPlan;
CREATE PROCEDURE “dba”.sp842_GenericasPlan( pUnidadAcademica LIKE sga_personas.unidad_academica,
pcarrera Like sga_carreras.carrera,
pplan like sga_planes.plan,
plegajo like sga_alumnos.legajo)
RETURNING integer;
– Descripcion del Return:
–decimal(6,2) , vdPorcentaje

– Definición de Variables.
DEFINE vcVersion LIKE sga_versiones_plan.version;
DEFINE vcTitulo LIKE sga_atrib_mat_orie.titulo;
DEFINE vcOrientacion LIKE sga_atrib_mat_orie.orientacion;
DEFINE vcMateria LIKE sga_atrib_mat_orie.materia;
DEFINE vdPorcentaje integer;
DEFINE vcResultGene char(1);
DEFINE vc_mat_gener integer;–decimal(6,2);

BEGIN

– inicializaciones.
LET vc_mat_gener = 0;

CREATE TEMP TABLE tmp_materia_porcen (
unidad_academica varchar(5),
carrera varchar(5),
legajo varchar(15),
plan varchar(5),
version varchar(5),
titulo varchar(5),
orientacion varchar(5),
materia varchar(5)) WITH NO LOG;

INSERT INTO tmp_materia_porcen (unidad_academica, carrera, plan, version, titulo, orientacion, materia)
SELECT vmp.unidad_academica, vmp.carrera, vmp.plan, vmp.version, vmp.titulo, vmp.orientacion, vmp.materia
FROM vw_materias_plan AS vmp, sga_atrib_mat_plan AS samp, sga_planes p
WHERE vmp.unidad_academica = pUnidadAcademica
AND vmp.carrera = pcarrera
AND vmp.plan = pplan
AND vmp.relacion = ‘D’
AND vmp.unidad_academica = samp.unidad_academica
AND vmp.carrera = samp.carrera
AND vmp.plan = samp.plan
AND vmp.version = samp.version
AND vmp.materia = samp.materia
AND obligatoria=‘S’
AND vmp.unidad_academica = p.unidad_academica
AND vmp.carrera = p.carrera
AND vmp.plan = p.plan
AND vmp.version = p.version_actual;

FOREACH WITH HOLD SELECT titulo, orientacion, materia
	INTO vcTitulo, vcOrientacion, vcMateria
	FROM tmp_materia_porcen

	LET vdPorcentaje = 0;

	IF (SELECT tipo_materia
		FROM sga_materias
		WHERE unidad_academica = pUnidadAcademica
			AND materia = vcMateria) = 'G' THEN

		-- si la materia es generica busco el porcentaje de aprobacion
		EXECUTE PROCEDURE sp_resultGenePorc(pUnidadAcademica, pcarrera, plegajo, vcTitulo, vcOrientacion,vcMateria) INTO vcResultGene, vdPorcentaje;
                                            LET vc_mat_gener = vdPorcentaje + vc_mat_gener;
	
	END IF;
	
END FOREACH; --materia
            RETURN   vc_mat_gener WITH RESUME; 

DROP TABLE tmp_materia_porcen;
END;

END PROCEDURE;

EXECUTE PROCEDURE “dba”.sp842_GenericasPlan( ‘UACO’, ‘048’, ‘048P3’, ‘1-17185411/99’);