Error -284 en Araucano Nominal

Hola
Necesito por favor si me pueden orientar a resolver el error 284, aparentemente es porque esta algún registro duplicado.
Seguí los foros relacionados pero aun sigo sin resolverlo.
Ejecute las querys


select sp_int_arau_datcen(unidad_academica, carrera ,legajo, 2020)  from sga_alumnos;

select nro_inscripcion,  sp_araunom_datpers(unidad_academica, nro_inscripcion, 2020, to_date('01042020','%d%m%Y'), to_date('31032021','%d%m%Y') from sga_personas;

La primera se ejecuta, la segunda me da error de sintaxis.
Incorpore las instrucciones para generar el debug pero es eterno y lleva días en ejecutarse en una maquina.
SET DEBUG FILE TO “c:\debug_sp.txt”;
TRACE ON;

TRACE OFF;

Finalmente fui ejecutando el procedimiento y el problema esta en la siguiente sección de código al querer insertar en la tabla int_araunom_oferta.

-- Archivo 1
FOREACH SELECT t.unidad_academica, int_araunom_alu.tipo_documento, int_araunom_alu.nro_documento, int_araunom_alu.cuil_cuit, t.carrera, t.legajo, t.plan, t.sede_actual, t.nro_inscripcion
          INTO vcUa, viTipoDocumento, vcNroDocumento, vcCuit, vcCarrera, vcLegajo, vcPlan, vcSedeActual, vcNroInscripcion 
          FROM int_araunom_alu, 
               _temp_alumnos as t
         WHERE int_araunom_alu.anio_academico = pAnioAcademico
           AND t.tipo_documento   = int_araunom_alu.tipo_documento
           AND t.nro_documento    = int_araunom_alu.nro_documento
 
        -- Cargo la tabla temporal de historia academica "sga_hist_acade_aux" usada por el proceso "sp_int_arau_datequ"
        EXECUTE PROCEDURE sp_ac_up_hacad_alu (vcUA, vcCarrera, vcLegajo, NULL);

        -- Año de ingreso
        EXECUTE PROCEDURE sp_int_arau_dating (vcUA, vcCarrera, vcLegajo) INTO iAnioIngreso;

        -- Forma de ingreso en la carrera. S = por Equivalencia / N = Ingreso normal
        EXECUTE PROCEDURE sp_int_arau_datequ(vcUA, vcCarrera, vcLegajo, iAnioIngreso) INTO vcFormaIngreso;

        -- Recupero la informacion de procedencia
     --   EXECUTE PROCEDURE sp_int_arau_datpro (vcUA, vcCarrera, vcLegajo, iAnioIngreso) INTO iProcedencia;

        -- Sede en la que se encontraba el alumno en el año academico a inforamr
        EXECUTE PROCEDURE sp_int_arau_datsed (vcUA, vcCarrera, vcLegajo, pAnioAcademico) INTO vcSede;

		-- Dependencia de ingreso
		LET iDepIngreso = NULL;
        SELECT NVL(s.instituc_araucano, ua.instituc_araucano) INTO iDepIngreso
	    FROM sga_carrera_aspira as ca,
		     sga_sedes as s,
			 sga_situacion_asp as sa,
			 sga_unidades_acad as ua
	    WHERE ca.unidad_academica = vcUA
	      AND ca.carrera = vcCarrera
	      AND ca.nro_inscripcion = vcNroInscripcion
		  AND ua.unidad_academica = vcUA
	      AND s.sede = ca.sede
		  AND sa.situacion_asp = ca.situacion_asp
          AND (sa.resultado_asp = 'I' OR sa.situacion_asp = 'IC');

		
        -- Inserto los titulos por cada alumno segun el plan actual en el que se encuentra
        INSERT INTO int_araunom_oferta (
        	anio_academico, 
        	tipo_documento, 
        	nro_documento, 
        	cuil_cuit, 
        	titulo,
        	instituc_araucano, 
        	titulo_araucano, 
        	anio_ingreso, 
        	forma_ingreso, 
        	fecha_egreso, 
        	-- procedencia,
        	dependenciaingreso,
        	dependenciaegreso,
        	unidad_academica,
        	carrera,
        	legajo,
        	plan)
        SELECT
        	pAnioAcademico,
        	viTipoDocumento,
        	vcNroDocumento,
        	vcCuit,
        	tit.titulo,
        	NVL(sga_sedes.instituc_araucano, sga_unidades_acad.instituc_araucano) as instituc_araucano,
        	CAST(tit.titulo_araucano as integer) as titulo_araucano, 
        	iAnioIngreso,
        	CASE vcFormaIngreso
        	  WHEN 'S' THEN 2 -- Por Equivalencia
        	  WHEN 'N' THEN 1 -- Normal
        	  ELSE 1 -- Normal
        	END,
        	CASE
        	   WHEN int_araunom_egres.fecha_egreso IS NOT NULL THEN to_char(int_araunom_egres.fecha_egreso, "%Y%m%d")
        	   ELSE CAST(NULL as varchar(10))  -- No obtuvo el titulo en este año academico.
        	END as fecha_egreso,
        	-- iProcedencia,
        	iDepIngreso,
        	CAST(NULL as integer) as dependencia_egreso,  -- Lo calculo al final luego de generar el archivo de actividades
        	sga_alumnos.unidad_academica,
        	sga_alumnos.carrera,
        	sga_alumnos.legajo,
        	vcPlan -- sga_alumnos.plan
  
        FROM 
            sga_alumnos, 
            _temp_titulos as tit,
            sga_unidades_acad, 
            sga_sedes,
            OUTER int_araunom_egres
            -- OUTER sga_titulos_otorg
        
        WHERE sga_alumnos.unidad_academica = vcUA
          AND sga_alumnos.carrera = vcCarrera
          AND sga_alumnos.legajo = vcLegajo
          AND sga_sedes.sede = vcSede
          AND sga_unidades_acad.unidad_academica = sga_alumnos.unidad_academica
          AND tit.unidad_academica = sga_alumnos.unidad_academica
          AND tit.carrera          = sga_alumnos.carrera
          AND tit.plan             = vcPlan               -- sga_alumnos.plan
          AND int_araunom_egres.unidad_academica = sga_alumnos.unidad_academica
          AND int_araunom_egres.carrera          = sga_alumnos.carrera
          AND int_araunom_egres.legajo           = sga_alumnos.legajo
          AND int_araunom_egres.titulo           = tit.titulo;

END FOREACH; -- Alumnos

¿Hay alguna otra manera de depurar este error?
Muchas gracias por la ayuda que nos puedan brindar.

Saludos

Hola, fijate que el proceso sp_arau_nominal fue actualizado. Hay una nueva version de fines de Noviembre.
Igualmente adjunto ese proceso en este mensaje. Fijate que se cambió la query donde recupera la dependencia de ingreso.

Pero esto no soluciona el problema que estas teniendo…

El error -284 no puede ser que lo de en el INSERT de la tabla int_araunom_oferta porque alli no hay ninguna subquery que pueda retornar mas de un valor (que es el error -284). Debe estar sucediendo en alguna de las querys anteriores:

    EXECUTE PROCEDURE sp_ac_up_hacad_alu (vcUA, vcCarrera, vcLegajo, NULL);
    -- Año de ingreso
    EXECUTE PROCEDURE sp_int_arau_dating (vcUA, vcCarrera, vcLegajo) INTO iAnioIngreso;
    -- Forma de ingreso en la carrera. S = por Equivalencia / N = Ingreso normal
    EXECUTE PROCEDURE sp_int_arau_datequ(vcUA, vcCarrera, vcLegajo, iAnioIngreso) INTO vcFormaIngreso;
    -- Recupero la informacion de procedencia
 --   EXECUTE PROCEDURE sp_int_arau_datpro (vcUA, vcCarrera, vcLegajo, iAnioIngreso) INTO iProcedencia;

    -- Sede en la que se encontraba el alumno en el año academico a inforamr
    EXECUTE PROCEDURE sp_int_arau_datsed (vcUA, vcCarrera, vcLegajo, pAnioAcademico) INTO vcSede;

Si el proceso tarda mucho en hacer el debug,entonces comenz{a el debug antes de este FOREACH del archivo 1, es decir aca:


EXECUTE PROCEDURE sp_int_araunom_egr(pAnioAcademico, ls_FechaIni, ls_FechaFin);
SET DEBUG FILE TO “c:\debug_archivo1.txt”;
TRACE ON;
– Archivo 1
FOREACH SELECT t.unidad_academica, int_araunom_alu.tipo_documento, int_araunom_alu.nro_documento, int_araunom_alu.cuil_cuit, t.carrera, t.legajo, t.plan, t.sede_actual, t.nro_inscripcion
INTO vcUa, viTipoDocumento, vcNroDocumento, vcCuit, vcCarrera, vcLegajo, vcPlan, vcSedeActual, vcNroInscripcion
FROM int_araunom_alu,
_temp_alumnos as t
WHERE int_araunom_alu.anio_academico = pAnioAcademico
AND t.tipo_documento = int_araunom_alu.tipo_documento
AND t.nro_documento = int_araunom_alu.nro_documento

END FOREACH;
TRACE OFF;

2


sp_arau_nominal.sql (61 KB)

Alejandro, como estas. Estamos corriendo el trace desde el medio dia y aun continua…el sp estaba actualizado, vamos a intentar con los stores que mencionas , depurandolos a ver si encontramos el error. Nos podrias orientar cual es el dato censal que podria estar causando problemas? el cambio de plan, o tener la fecha de egreso anterior a la reinscripcion, etc… ya que no sabemos donde chequear y es sumamente extenso… Desde ya agradecemos cualquier ayuda. Gracias

Les adjunto un procedure que ejecuta el procedure sp_araunom_datpers que creo es el que da error.
Creen este proceso y ejecutenlo (al final esta comentado el execute) y vean si da el error -384 e informa que alumno es el que da error y de ser asi vemos que SELECT es la que devuelve mas de una fila.

4


sp_test_datpers.sql (2.58 KB)

Hola lo ejecute y no me da error
Proceso finalizado
Eso me sale

Envio nuevamente el procedure, le agregue el llamado a los otros procedures que se ejecutan por cada alumno para ver si el error esta en alguno de ellos.
Si da error va a informar el nro de inscripcion del alumno con el problema y el nombre del procedure.


sp_test_datpers.sql (4.33 KB)

Hola Alejandro
Ahí ejecute exactamente el script enviado y da error -661, como la pantalla que te adjunto.

En la salida sale el mensaje es : “Error: Nro Insc:MIGCO-0014 - sp_int_arau_datpers -”

Analizando el mensaje, entiendo se refiere a las siguientes lineas de código


        LET vcProcesoError = 'sp_int_arau_datpers'; 
        EXECUTE PROCEDURE sp_araunom_datpers (vcUa, vcNroInscripcion, pAnioAcademico, ld_FechaIniAA, ld_FechaFinAA)   
	   INTO vc_horas_trabajo, i_nivel_est_padre, i_nivel_est_madre, iPaisProcedencia; --, iLocProcedencia;

El store devuelve cinco parámetros y en la sentencia INTO tengo cuatro.
Si saco lo comentado
--, iLocProcedencia;
Ahí si funciona y termina de ejecutar el store sp_test_datpers correctamente o ¿como tengo que analizar el inconveniente?

Espero que nos puedan orientar,
saludos
Adriana


error 661.png

error 661.png

Perdon!, tratando de hacer que falle ese procedure es que comenté esa variable de retorno del procedure y me olvide de volver atras el cambio.
Envio nuevamente el procedure.

Ahora si arreglaste eso, lo ejecutaste al procedure y no dio error, entonces el problema esta en otro lado!..

Adjunto nuevamente el procedure con lo que reportaste corregido y ademas agregue una consulta mas que tiene que ver con la dependencia de ingreso que fue lo que se agregó en esta ultima modificacion de Araucano.

Volve a crear el procedure y probalo nuevamente.

2


sp_test_datpers.sql (4.9 KB)

Hola Alejandro
Gracias por generar el procedure sp_test_datpers eso nos ayudo a avanzar en el análisis.
En nuestra base de datos tenemos 4 alumnos que tiene dos registros en la tabla ga_carrera_aspira en estado IL de una misma carrera en diferentes periodo de inscripción, por lo que cambiamos el estado a uno de ellos, fuimos avanzando y pudimos generar los archivos para araucano.
Ahora tenemos otro error pero es con la subida del archivo mi compañera genero otro hilo para ese mensaje.
Saludos,
Adriana

El problema estaba en las inscripciones a propuestas que tenian esos alumnos.
Con esta consulta se ven esos alumnos con problemas en la inscripción, donde solo debe haber un registro con resultado I o A:

SELECT ca.unidad_academica, ca.carrera, ca.nro_inscripcion, count(*)
  FROM sga_carrera_aspira as ca,
       sga_sedes as s,
       sga_situacion_asp as sa,
	   sga_periodo_insc as pi
WHERE s.sede = ca.sede
  AND sa.situacion_asp = ca.situacion_asp
  AND sa.resultado_asp IN ('I', 'A')
  AND pi.periodo_inscripcio = ca.periodo_inscripcio
  AND pi.anio_academico <= 2020
GROUP BY ca.unidad_academica, ca.carrera, ca.nro_inscripcion
HAVING COUNT(*) > 1 ;