Módulo equivalencias - Error de sintaxis

Hola

Estoy migrando hacia la versión 3.19.1.
Al querer ejecutar: 02_Modulos/60_Equivalencias/02_Migracion/mig_Equivalencias.kjb da error de sintaxis en el script 07_actividades_extracurriculares.sql.
En adjunto envío el archivo.

Entiendo en principio que está faltando un AND en la línea 100.

Pero luego de agregarlo, da otro error más:

PL/pgSQL function inline_code_block line 15 at SQL statement
Envío la salida del spoon en adjunto.

Gracias por la ayuda.

Iris


07_actividades_extracurriculares.sql (16.7 KB)

salida_spoon.txt (39.9 KB)

Si este error ya habia sido reportado en otro foro.
Fijate este mensaje que arregla un bug en Tesis y Actividades Extracurriculares

Muchas gracias!!
Iris

Hola
Estoy probando nuevamente la migración de G2 a G3, pero ahora a la versión 3.20

En el script 07_actividades_extracurriculares.sql del módulo Equivalencias, está este código, que ordena por apellido y nombre de la persona, pero la tabla mdp_presonas nunca se consulta, con lo cual da error.

   SELECT 
    	cnv_r.nro_tramite,
    	ele.elemento,
    	'N' as homologada,
    	'S' as reconocimiento_total, -- La actividad extracurricular se reconoce en su totalidad.
    	sga_activ_alumno.puntaje_otorgado
    FROM mig._cnv_pk_reconocimiento as cnv_r
    JOIN sga_reconocimiento as r ON r.nro_tramite = cnv_r.nro_tramite
    JOIN mig.sga_resol_activ ON mig.sga_resol_activ.unidad_academica  = cnv_r.unidad_academica  AND 
                                mig.sga_resol_activ.resol_actividades = cnv_r.resol_actividades
    JOIN mig.sga_activ_resol ON mig.sga_activ_resol.unidad_academica = mig.sga_resol_activ.unidad_academica  AND 
                                mig.sga_activ_resol.resol_actividades = mig.sga_resol_activ.resol_actividades
    JOIN mig.sga_activ_alumno ON mig.sga_activ_alumno.unidad_academica  = mig.sga_activ_resol.unidad_academica AND  
                                 mig.sga_activ_alumno.resol_actividades = mig.sga_activ_resol.resol_actividades AND
                                 mig.sga_activ_alumno.area              = mig.sga_activ_resol.area AND 
                                 mig.sga_activ_alumno.actividad         = mig.sga_activ_resol.actividad AND
                                 mig.sga_activ_alumno.fecha             = mig.sga_activ_resol.fecha
    JOIN mig.sga_alumnos_resol ON  mig.sga_alumnos_resol.unidad_academica  = mig.sga_activ_alumno.unidad_academica AND  
                                   mig.sga_alumnos_resol.resol_actividades = mig.sga_activ_alumno.resol_actividades AND  
                                   mig.sga_alumnos_resol.carrera           = mig.sga_activ_alumno.carrera AND  
    	                           mig.sga_alumnos_resol.legajo            = mig.sga_activ_alumno.legajo    
    JOIN mig._cnv_pk_elementos as m_act ON m_act.unidad_academica = mig.sga_activ_resol.unidad_academica  AND 
                                           m_act.codigo           = mig.sga_activ_resol.actividad  AND 
    									   m_act.tipo             = 'ACTIVIDAD_EXT'
    JOIN sga_elementos as ele ON ele.elemento = m_act.elemento									   
    JOIN mig._cnv_pk_alumnos as m_alu ON m_alu.unidad_academica  = mig.sga_alumnos_resol.unidad_academica AND 
                                         m_alu.carrera			  = mig.sga_alumnos_resol.carrera AND 
                                         m_alu.legajo			  = mig.sga_alumnos_resol.legajo

    WHERE cnv_r.origen = 'EXTRACURRICULAR'
	  AND m_alu.alumno = r.alumno
    ORDER BY cnv_r.nro_tramite, ele.nombre, mdp_personas.apellido, mdp_personas.nombres;

Basta con eliminar solamente los 2 últimos campos extra del ORDER BY? o debe ir otra cosa?

Gracias.

Iris

Si Iris, quedo mal esas dos columnas de apellido y nombres, no deben estar en el ORDER BY.

No estoy pudiendo ejecutar el script 07_actividades_extracurriculares.sql del módulo Equivalencias

Da el siguiente error:

07_actividades_extracurriculares.sql - PL/pgSQL function inline_code_block line 15 at SQL statement

Mirando con un poco más de detalle,

select * from mig.get_default('actividades_extracur');

retorna 2.

No me doy cuenta dónde o por qué falla.
Adjunto el código de ese script por las dudas.

Alguna idea u orientación?
Gracias

Iris


07_actividades_extracurriculares.sql (16.7 KB)

Iris, hice un cambio en ese script, fijate de reemplazar este archivo y volver a correr el proceso de migración.


07_actividades_extracurriculares.sql (16.8 KB)

Hola Alejandro
Sigue el error…

07_actividades_extracurriculares.sql - PL/pgSQL function mig.sp_migrar_actividades_ext() line 19 at SQL statement

Sigo analizando, y esta consulta retorna:

  • algunas tuplas con el campo estado en " " (lo rastree y corresponde a una única resol_actividades que ya la tengo identificada, y estoy averiguando por qué el estado no es ni Abierto, ni Cerrado, ni Anulado)
  • varias tuplas con el campo plan_version en NULL
 SELECT DISTINCT
  	cnv_r.nro_tramite,
  	m_alu.alumno,
  	(SELECT m_pv.plan_version 
       FROM mig.sga_activ_alumno 
       JOIN mig._cnv_pk_planes_versiones as m_pv ON m_pv.unidad_academica = mig.sga_activ_alumno.unidad_academica AND 
                                                    m_pv.carrera          =  mig.sga_activ_alumno.carrera AND 
  	                                                m_pv.plan_g2          = mig.sga_activ_alumno.plan AND 
  	                                                m_pv.version          = mig.sga_activ_alumno.version
  	WHERE mig.sga_activ_alumno.unidad_academica  = mig.sga_resol_activ.unidad_academica 
  	  AND mig.sga_activ_alumno.resol_actividades = mig.sga_resol_activ.resol_actividades 
  	  AND mig.sga_activ_alumno.carrera           = mig.sga_alumnos_resol.carrera 
  	  AND mig.sga_activ_alumno.legajo            = mig.sga_alumnos_resol.legajo
  	LIMIT 1
  	) as plan_version,											
  	(SELECT cpd.documento
  	  FROM mig.sga_resoluciones
      JOIN mig._cnv_pk_documentos as cpd ON 
  				(cpd.resolucion  = mig.sga_resoluciones.resolucion_numero AND 
  				cpd.documento_tipo = (CASE
  										WHEN mig.sga_resoluciones.resolucion_tipo = 'CA'  THEN 1 
  										WHEN mig.sga_resoluciones.resolucion_tipo = 'CS'  THEN 2 
  										WHEN mig.sga_resoluciones.resolucion_tipo = 'CD'  THEN 3 
  										WHEN mig.sga_resoluciones.resolucion_tipo = 'DEC' THEN 4 
  										WHEN mig.sga_resoluciones.resolucion_tipo = 'DAR' THEN 5 
  										WHEN mig.sga_resoluciones.resolucion_tipo = 'REC' THEN 6 
  										ELSE 7 
  									END) AND 
  				cpd.fecha = COALESCE(mig.sga_resoluciones.fecha, to_date(mig.get_default('fecha_resolucion'),'YYYY-MM-DD')) AND
  				cpd.tabla = 'sga_resoluciones'
				)
  	WHERE mig.sga_resoluciones.resolucion = cnv_r.resol_actividades 
  	LIMIT 1) as documento,								
  	'AM', -- Actividades/Modulos
  	mig.sga_resol_activ.fecha,
  	mig.sga_resol_activ.fecha,
  	CASE mig.sga_resol_activ.estado 
  	  WHEN 'A' THEN cast(null as date)
  	  WHEN 'C' THEN mig.sga_resol_activ.fecha
  	END as fecha_cierre,
  	COALESCE(mig.sga_alumnos_resol.observaciones,'') || 
  	  CASE mig.sga_resol_activ.modalidad  
  	    WHEN 'G' THEN COALESCE(' .' || sga_alumnos_resol.observaciones,'')
  	    WHEN 'I' THEN ''
  	  END,
  	mig.sga_resol_activ.estado
  
  FROM mig._cnv_pk_reconocimiento as cnv_r
  JOIN mig.sga_resol_activ ON mig.sga_resol_activ.unidad_academica  = cnv_r.unidad_academica  AND 
                              mig.sga_resol_activ.resol_actividades = cnv_r.resol_actividades
  JOIN mig.sga_alumnos_resol ON  mig.sga_alumnos_resol.unidad_academica  = mig.sga_resol_activ.unidad_academica AND  
                                 mig.sga_alumnos_resol.resol_actividades = mig.sga_resol_activ.resol_actividades AND 
                                 mig.sga_alumnos_resol.carrera = cnv_r.carrera AND
                                 mig.sga_alumnos_resol.legajo  = cnv_r.legajo  
  JOIN mig._cnv_pk_alumnos as m_alu ON m_alu.unidad_academica = mig.sga_alumnos_resol.unidad_academica AND 
                                       m_alu.carrera		  = mig.sga_alumnos_resol.carrera AND 
  	                                   m_alu.legajo			  = mig.sga_alumnos_resol.legajo
  JOIN sga_alumnos ON sga_alumnos.alumno = m_alu.alumno
  WHERE cnv_r.origen = 'EXTRACURRICULAR'
  ORDER BY cnv_r.nro_tramite;

Por si sirve para detectar el inconveniente.
Gracias por la ayuda!

Iris

Hola Iris, pero no es el mismo error, podes enviar el error exacto que da?
El anterior era:

07_actividades_extracurriculares.sql - PL/pgSQL function inline_code_block line 15 at SQL statement

Ahora es:

07_actividades_extracurriculares.sql - PL/pgSQL function mig.sp_migrar_actividades_ext() line 19 at SQL statement

Podes correr el script desde el PgAdmin, y fijate que error es el que devuelve.

Hola Alejandro
Si, es verdad, el mensaje no es el mismo.
Pero al crear la función, cambió de lugar el mismo error.
Te adjunto la salida la ejecución.
Entiendo es por tener el campo plan_version en NULL.
Gracias

Iris


07_activ_extracurr_error.txt (3.81 KB)

Para esos registros que da plan_version NULL, verfiicaste si existe el alumno en Guarani 2 y si existe la version de plan en Guarani 2?
Y si existe, fijate si esa version de plan existe en Guarani 3.

Hola Alejandro
Son muchas las tuplas que tienen el campo plan_version en null.

Tomando de esas tuplas, 2 alumnos al azar

select * from mig._cnv_pk_alumnos where alumno in (5195, 5245);

Veo que el periodo_inscripcio lo tienen en null.
En las tablas mig.sga_alumnos y mig.sga_carrera_aspira existen.
En mig.sga_carrera_aspira sí tienen definido el periodo_inscripcio, y dicho período también existe en la tabla mig.sga_periodo_insc.

Los planes existen en mig.sga_planes, también en mig._cnv_pk_planes_versiones (verificando por carrera-plan-version).
También están definidos en negocio.sga_planes_versiones.

Puede influir en algo que tienen aprobadas diferentes actividades extracurriculares en distintas versiones del mismo plan?

No se qué mas mirar…

Iris

Puede influir en algo que tienen aprobadas diferentes actividades extracurriculares en distintas versiones del mismo plan?
Si en la misma resolucion (mig.sga_resol_activ.resol_actividades) a un alumno le reconocieron mas de una actividad en diferentes versiones de plan, en este script toma una sola version de plan y registra esa. Pero por lo que indicas no recupera ninguna de esas versiones de plan. Fijate a que resolucion corresponde, agrega el campo [b]mig.sga_resol_activ.resol_actividades[/b] en la consulta anterior Luego busca los registros relacionados con esa resolución
SELECT mig.sga_activ_alumno.*
FROM mig.sga_resol_activ 
  JOIN mig.sga_alumnos_resol ON  mig.sga_alumnos_resol.unidad_academica  = mig.sga_resol_activ.unidad_academica AND  
                                 mig.sga_alumnos_resol.resol_actividades = mig.sga_resol_activ.resol_actividades 

  JOIN mig._cnv_pk_alumnos as m_alu ON m_alu.unidad_academica = mig.sga_alumnos_resol.unidad_academica AND 
                                       m_alu.carrera		  = mig.sga_alumnos_resol.carrera AND 
  	                                   m_alu.legajo			  = mig.sga_alumnos_resol.legajo
  JOIN sga_alumnos ON sga_alumnos.alumno = m_alu.alumno

  JOIN mig.sga_activ_alumno ON  mig.sga_activ_alumno.unidad_academica  = mig.sga_resol_activ.unidad_academica 
                                                  AND mig.sga_activ_alumno.resol_actividades = mig.sga_resol_activ.resol_actividades 
                                           	  AND mig.sga_activ_alumno.carrera           = mig.sga_alumnos_resol.carrera 
                                         	  AND mig.sga_activ_alumno.legajo            = mig.sga_alumnos_resol.legajo
/*
    JOIN mig._cnv_pk_planes_versiones as m_pv ON m_pv.unidad_academica = mig.sga_activ_alumno.unidad_academica AND 
                                                    m_pv.carrera          = mig.sga_activ_alumno.carrera AND 
  	                                                m_pv.plan_g2          = mig.sga_activ_alumno.plan AND 
  	                                                m_pv.version          = mig.sga_activ_alumno.version
*/

WHERE mig.sga_resol_activ.resol_actividades = 'xxxxxxxxx'

proba esta query sin el join con mig._cnv_pk_planes_versiones y con el join… (lo deje comentado)
Fijate si al agregar el join hace que no se recuperen registros.

En la tabla mig.sga_activ_alumno estan los datos del alumno con su plan y version, estos datos existen en Guarani 2?
(mig.sga_versiones_plan)

4

La consulta del script, 2 de las tuplas que retorna son estas:

[tr]
[td]nro_tramite[/td][td]alumno[/td][td]plan_version[/td][td]documento[/td][td]?column?[/td][td]fecha[/td][td]fecha[/td][td]fecha_cierre[/td][td]?column?[/td][td]estado[/td]
[/tr][tr]
[td]20.001[/td][td]5.195[/td][td][NULL][/td][td]1.387[/td][td]AM[/td][td]2013-02-28[/td][td]2013-02-28[/td][td][NULL]|[/td][td]A[/td]
[/tr][tr]
[td]20.003[/td][td]5.245[/td][td][NULL][/td][td]1.387[/td][td]AM[/td][td]2013-02-28[/td][td]2013-02-28[/td][td][NULL][/td][td]|A[/td]
[/tr]

Tomando dicho documento y haciendo la siguiente consulta:

SELECT *
   FROM mig.sga_resoluciones
   JOIN mig._cnv_pk_documentos as cpd ON (cpd.resolucion = mig.sga_resoluciones.resolucion_numero)
       WHERE cpd.documento = 1387;

Obtengo que mig.sga_resoluciones.resolucion = ‘000000000001409’

Ahora, la siguiente consulta no retorna nada:

SELECT * --m_pv.plan_version 
	FROM mig.sga_activ_alumno 
--  JOIN mig._cnv_pk_planes_versiones as m_pv ON m_pv.unidad_academica = mig.sga_activ_alumno.unidad_academica AND 
--  									m_pv.carrera          =  mig.sga_activ_alumno.carrera AND 
--  	                                m_pv.plan_g2          = mig.sga_activ_alumno.plan AND 
--  	                                m_pv.version          = mig.sga_activ_alumno.version
	WHERE mig.sga_activ_alumno.unidad_academica  = 'FCE' 
		AND mig.sga_activ_alumno.resol_actividades = '000000000001409' 
		-- AND mig.sga_activ_alumno.carrera           = mig.sga_alumnos_resol.carrera 
		AND mig.sga_activ_alumno.legajo            in (select legajo from mig._cnv_pk_alumnos where alumno in (5195, 5245));

Ayuda para encontrar el motivo?
Saludos

Iris

Fijate para esa resolucion, que registros hay en las tablas:

SELECT * FROM mig.sga_alumnos_resol WHERE resol_actividades = '000000000001409'; SELECT * FROM mig.sga_activ_alumnos WHERE resol_actividades = '000000000001409';

Debieran existir los mismos alumnos. ¿Se corresponden?

Hola Alejandro
Probando tus sugerencias

Fijate a que resolucion corresponde, agrega el campo mig.sga_resol_activ.resol_actividades en la consulta anterior

Agregué el campo mig.sga_resol_activ.resol_actividades a la consulta y la restringí a los alumnos (5195, 5245):

Algunas de las resol_actividades que corresponden a un plan_version = NULL son ‘000000000001237’ y ‘000000000001409’.

Ahora, esta consulta no devuelve nada:

SELECT mig.sga_activ_alumno.*
FROM mig.sga_resol_activ
  JOIN mig.sga_alumnos_resol ON  mig.sga_alumnos_resol.unidad_academica  = mig.sga_resol_activ.unidad_academica AND 
                                 mig.sga_alumnos_resol.resol_actividades = mig.sga_resol_activ.resol_actividades

  JOIN mig._cnv_pk_alumnos as m_alu ON m_alu.unidad_academica = mig.sga_alumnos_resol.unidad_academica AND
                                       m_alu.carrera		  = mig.sga_alumnos_resol.carrera AND
  	                                   m_alu.legajo			  = mig.sga_alumnos_resol.legajo
  JOIN sga_alumnos ON sga_alumnos.alumno = m_alu.alumno

  JOIN mig.sga_activ_alumno ON  mig.sga_activ_alumno.unidad_academica  = mig.sga_resol_activ.unidad_academica
                                                  AND mig.sga_activ_alumno.resol_actividades = mig.sga_resol_activ.resol_actividades
                                           	  AND mig.sga_activ_alumno.carrera           = mig.sga_alumnos_resol.carrera
                                         	  AND mig.sga_activ_alumno.legajo            = mig.sga_alumnos_resol.legajo
/*
    JOIN mig._cnv_pk_planes_versiones as m_pv ON m_pv.unidad_academica = mig.sga_activ_alumno.unidad_academica AND
                                                    m_pv.carrera          = mig.sga_activ_alumno.carrera AND
  	                                                m_pv.plan_g2          = mig.sga_activ_alumno.plan AND
  	                                                m_pv.version          = mig.sga_activ_alumno.version

*/
WHERE mig.sga_resol_activ.resol_actividades in ( '000000000001237', '000000000001409')
and mig.sga_activ_alumno.legajo in (select legajo from mig._cnv_pk_alumnos where alumno in (5195, 5245));

Con respecto a tu última pregunta:

SELECT count(*) FROM mig.sga_alumnos_resol  WHERE resol_actividades = '000000000001409';   ---> 530 tuplas
SELECT count(*) FROM mig.sga_activ_alumno  WHERE resol_actividades = '000000000001409';  ---> 512 tuplas

Es más:

SELECT count(*) FROM mig.sga_alumnos_resol;   --->44922
SELECT count(*) FROM mig.sga_activ_alumno;	--->40925

Aclaración, los pre-controles da lo siguiente:

Advertencia: Existen trámites de equivalencias que no tienen registradas equivalencias. Estos tramites de equivalencias no se migrarán.
Puede estar afectando?

Gracias!!

Iris

Hola Alejandro
Cuál puede ser el motivo por el cual hay diferencia entre las tablas sga_alumnos_resol y sga_activ_alumno de G2?
Gracias

Iris

Lo del mensaje de equivalencias no afecta, solo son tramites de equivalencias abiertos que no tenian registrada ninguna equivalencia. Es solo una advertencia.

SELECT count(*) FROM mig.sga_alumnos_resol; --->44922 SELECT count(*) FROM mig.sga_activ_alumno; --->40925
Esto tampoco afecta. Las actividades extracurriculares en Guarani 2 se podian otorgar de la siguiente manera:

a) N actividades a 1 alumno
Un resgistro en sga_alumnos_resol y N registros en sga_activ_alumno (uno por cada actividad para ese alumno)

b) 1 actividad a N alumnos: N registros en sga_alumnos_resol, uno por cada alumno y N registros en sga_activ_alumno (uno por cada alumno-actividad)

Por favor, esta query anda descomentando cada JOIN para ver donde esta el problema:


SELECT *
FROM mig.sga_resol_activ

/*
  JOIN mig.sga_alumnos_resol ON  mig.sga_alumnos_resol.unidad_academica  = mig.sga_resol_activ.unidad_academica AND
                                 mig.sga_alumnos_resol.resol_actividades = mig.sga_resol_activ.resol_actividades

  JOIN mig._cnv_pk_alumnos as m_alu ON m_alu.unidad_academica = mig.sga_alumnos_resol.unidad_academica AND
                                       m_alu.carrera		  = mig.sga_alumnos_resol.carrera AND
  	                                   m_alu.legajo			  = mig.sga_alumnos_resol.legajo
  JOIN sga_alumnos ON sga_alumnos.alumno = m_alu.alumno

  JOIN mig.sga_activ_alumno ON  mig.sga_activ_alumno.unidad_academica  = mig.sga_resol_activ.unidad_academica
                                                  AND mig.sga_activ_alumno.resol_actividades = mig.sga_resol_activ.resol_actividades
                                           	  AND mig.sga_activ_alumno.carrera           = mig.sga_alumnos_resol.carrera
                                         	  AND mig.sga_activ_alumno.legajo            = mig.sga_alumnos_resol.legajo

    JOIN mig._cnv_pk_planes_versiones as m_pv ON m_pv.unidad_academica = mig.sga_activ_alumno.unidad_academica AND
                                                    m_pv.carrera          = mig.sga_activ_alumno.carrera AND
  	                                                m_pv.plan_g2          = mig.sga_activ_alumno.plan AND
  	                                                m_pv.version          = mig.sga_activ_alumno.version

*/
WHERE mig.sga_resol_activ.resol_actividades in ( '000000000001237', '000000000001409');

Hola Alejandro

Esta consulta por ejemplo, retorna 18 registros:

SELECT * FROM mig.sga_alumnos_resol  WHERE resol_actividades = '000000000001409'
	and legajo not in (SELECT legajo FROM mig.sga_activ_alumno  WHERE resol_actividades = '000000000001409');

A ver si entiendo…

a) N actividades a 1 alumno Un resgistro en sga_alumnos_resol y N registros en sga_activ_alumno (uno por cada actividad para ese alumno)
[b]sga_alumnos_resol[/b] debería tener menos registros que [b]sga_activ_alumno[/b] y no es nuestro caso, es al revés.

Mientras que:

b) 1 actividad a N alumnos: N registros en sga_alumnos_resol, uno por cada alumno y N registros en sga_activ_alumno (uno por cada alumno-actividad)
Deberían ser la misma cantidad de tuplas en ambas tablas para estos casos... no?

Ahora sigo analizando tu otra consulta

Gracias
Iris