Hola
Estoy migrando G2 a G3 hacia la versión 3.18
Me tira error 02_Modulos/75_Tesis/02_Migracion/04_sga_tesis_cmb.sql.
La descripción del error es: 04_sga_tesis_cmb - ERROR: null value in column "estado_nuevo" of relation "sga_tesis_cmb" violates not-null constraint 04_sga_tesis_cmb - Detail: Failing row contains (3, 1, 2018-11-09 15:37:52-03, null, null, null, null).
Estuve tratando de seguirlo un poco, y observo lo siguiente:
En nuestra base tenemos ciertos estados, que no todos están en la base del negocio (En adjunto envío captura de los estados que manejamos).
Luego, una de las consultas del script 04_sga_tesis_cmb.sql arma un CASE, con lo siguiente:
....
ELSE (SELECT estado FROM mce_estados WHERE nombre = hist.estado_nuevo AND tipo = 'Tesis')
Y veo que el campo nombre de la tabla negocio.mce_estados es una descripción, mientras que hist.estado_nuevo es un código, con lo cual nunca llega a hacer match. Lo mismo ocurre con hist.estado_anterior.
Ese es el motivo por el cual varios estados nos quedan asignados en null.
Luego, al querer insertarlos en la tabla negocio.sga_tesis_cmb falla ya que la misma no acepta estado_nuevo en null.
Agradecería si pudieran orientarme cómo resolverlo.
Muchas gracias!!
En nuestra base tenemos ciertos estados, que no todos están en la base del negocio (En adjunto envío captura de los estados que manejamos).
Editen el archivo de migracion [b]06_sga_certificados_otorg_cmb.sql[/b] y agreguen alli en la tabla [b]mce_estados[/b], los estados que uds personalizaron en Guarani 2. Al comienzo del script, previo al insert de registros en la tabla sga_certificados_otorg_cmb.
O quizas agregarlo en el archivo [b]05_sga_certificados_otorg.sql[/b], ya que esta tabla tiene el campo "estado" (seria el estado actual del tramite de egreso)
Los archivos que me indicás modificar, están en el siguiente módulo: "85_Egresados". ¿Cómo debería agregar allí la tabla mce_estados?
Nosotros tenemos esto:
SELECT * FROM mig.sga_tesis_estados;
[tr] [td] estado [/td][td] nombre [/td][td] tipo[/td] [/tr]
[tr] [td] TA [/td][td] Tesis aprobada [/td][td] F [/td] [/tr]
[tr] [td] TD [/td][td] Tesis desaprobada [/td][td] F [/td] [/tr]
[tr] [td] AT [/td][td] Aprobado por tribunal [/td][td] I [/td] [/tr]
[tr] [td] OT [/td][td] Observado por tribunal [/td][td] I [/td] [/tr]
[tr] [td] RT [/td][td] Rechazado por tribunal [/td][td] I [/td] [/tr]
[tr] [td] PE [/td][td] Pendiente de entrega [/td][td] I [/td] [/tr]
[tr] [td] ED [/td][td] Entregado a docentes [/td][td] I [/td] [/tr]
[tr] [td] LD [/td][td] Listo para defensa [/td][td] I [/td] [/tr]
[tr] [td] PA [/td][td] Plan de trabajo aprobado [/td][td] I [/td] [/tr]
[tr] [td] PR [/td][td] Plan de trabajo rechazado [/td][td] I [/td] [/tr]
[tr] [td] PCM [/td][td] Plan de trabajo aprobado con m [/td][td] I [/td] [/tr]
[tr] [td] IF [/td][td] Informe finalizado [/td][td] I [/td] [/tr]
[tr] [td] IA [/td][td] Informe aprobado [/td][td] I [/td] [/tr]
[tr] [td] ID [/td][td] Informe desaprobado [/td][td] I [/td] [/tr]
[tr] [td] IED [/td][td] Informe Entregado a Docentes [/td][td] I [/td] [/tr]
Por otro lado, veo que el esquema del negocio tiene esto:
SELECT * FROM negocio.mce_estados;
Con los siguientes campos:
[tr] [td]estado [/td][td] nombre [/td][td] descripcion [/td][td] tipo [/td][td] activo[/td][/tr]
Debería agregar nuestros datos en esta última tabla?
Lo que entiendo, es que debería resolver el inconveniente antes de migrar el módulo “75_Tesis”.
Ok. la tabla mce_estados de G3 tiene los estados usados en el circuito de Tesis y el circuito de Egreso.
Como bien indicas, fijate que en el archivo de migracion 02_sga_tesis.sql se estan insertando los estados que estan la tabla de G2 sga_tesis_estados a mce_estados de G3.
SELECT *
FROM mig.sga_tesis_estados
WHERE nombre NOT IN (SELECT nombre FROM mce_estados WHERE tipo = 'Tesis');
Debería agregar nuestros datos en esta última tabla?
Si, lo hace en ese insert del archivo mencionado antes.
¿Que archivo de migracion falla? 02_sga_tesis.sql o 04_sga_tesis_cmb.sql
Si es el 2do, fijate si estas querys devuelven registros:
SELECT * FROM mig.sga_tesis_hist WHERE estado_anterior IS NOT NULL AND estado_anterior NOT IN (SELECT estado FROM mig.sga_tesis_estados);
SELECT * FROM mig.sga_tesis_hist WHERE estado_nuevo IS NOT NULL AND estado_nuevo NOT IN (SELECT estado FROM mig.sga_tesis_estados);
El que falló fue el 04_sga_tesis_cmb.
En adjunto te envío el log del spoon.
Las consultas que indicás no devuelven nada, ninguna tupla (ninguna de las 3 que mencionás).
Una de las consultas del script 04_sga_tesis_cmb.sql arma un CASE, con lo siguiente:
SELECT cnv.tesis, fecha,
CASE WHEN estado_anterior='TA' THEN 26 --Tesis aprobada
WHEN estado_anterior='TD' THEN 27 --Tesis desaprobada
WHEN estado_anterior='AT' THEN 22 --Aprobado por tribunal
WHEN estado_anterior='OT' THEN 23 --Observado por tribunal
WHEN estado_anterior='RT' THEN 24 --Rechazado por tribunal
WHEN estado_anterior='PE' THEN 20 --Pendiente de entrega
WHEN estado_anterior='ED' THEN 21 --Entregado a docentes
WHEN estado_anterior='LD' THEN 25 --Listo para defensa
ELSE (SELECT estado FROM mce_estados WHERE nombre = hist.estado_anterior AND tipo = 'Tesis') -- Nuevo estado de la institucion
END,
CASE WHEN estado_nuevo='TA' THEN 26 --Tesis aprobada
WHEN estado_nuevo='TD' THEN 27 --Tesis desaprobada
WHEN estado_nuevo='AT' THEN 22 --Aprobado por tribunal
WHEN estado_nuevo='OT' THEN 23 --Observado por tribunal
WHEN estado_nuevo='RT' THEN 24 --Rechazado por tribunal
WHEN estado_nuevo='PE' THEN 20 --Pendiente de entrega
WHEN estado_nuevo='ED' THEN 21 --Entregado a docentes
WHEN estado_nuevo='LD' THEN 25 --Listo para defensa
ELSE (SELECT estado FROM mce_estados WHERE nombre = hist.estado_nuevo AND tipo = 'Tesis') -- Nuevo estado de la institucion
END,
observaciones
FROM mig.sga_tesis_hist hist,
mig._cnv_pk_tesis cnv,
sga_tesis tes
WHERE cnv.tesis_g2 = hist.tesis
AND cnv.tesis=tes.tesis;
Dicha consulta, por ejemplo, algunos de los valores que retorna son los que envío en la imagen en adjunto.
Veo que el campo “nombre” de la tabla negocio.mce_estados es una descripción, mientras que “hist.estado_nuevo” es un código, con lo cual nunca llega a hacer match. Lo mismo ocurre con hist.estado_anterior.
Ese es el motivo por el cual varios estados nos quedan asignados en null.
SELECT cnv.tesis, fecha,
CASE
WHEN estado_anterior = 'TA' THEN 26 --Tesis aprobada
WHEN estado_anterior = 'TD' THEN 27 --Tesis desaprobada
WHEN estado_anterior = 'AT' THEN 22 --Aprobado por tribunal
WHEN estado_anterior = 'OT' THEN 23 --Observado por tribunal
WHEN estado_anterior = 'RT' THEN 24 --Rechazado por tribunal
WHEN estado_anterior = 'PE' THEN 20 --Pendiente de entrega
WHEN estado_anterior = 'ED' THEN 21 --Entregado a docentes
WHEN estado_anterior = 'LD' THEN 25 --Listo para defensa
ELSE (SELECT mce_estados.estado
FROM mig.sga_tesis_estados
JOIN mce_estados ON mce_estados.nombre = mig.sga_tesis_estados.nombre
WHERE mig.sga_tesis_estados.estado = hist.estado_anterior
AND mce_estados.tipo = 'Tesis') -- Nuevo estado de la institucion
END,
CASE
WHEN estado_nuevo = 'TA' THEN 26 --Tesis aprobada
WHEN estado_nuevo = 'TD' THEN 27 --Tesis desaprobada
WHEN estado_nuevo = 'AT' THEN 22 --Aprobado por tribunal
WHEN estado_nuevo = 'OT' THEN 23 --Observado por tribunal
WHEN estado_nuevo = 'RT' THEN 24 --Rechazado por tribunal
WHEN estado_nuevo = 'PE' THEN 20 --Pendiente de entrega
WHEN estado_nuevo = 'ED' THEN 21 --Entregado a docentes
WHEN estado_nuevo = 'LD' THEN 25 --Listo para defensa
ELSE (SELECT mce_estados.estado
FROM mig.sga_tesis_estados
JOIN mce_estados ON mce_estados.nombre = mig.sga_tesis_estados.nombre
WHERE mig.sga_tesis_estados.estado = hist.estado_nuevo
AND mce_estados.tipo = 'Tesis') -- Nuevo estado de la institucion
END,
observaciones
FROM mig.sga_tesis_hist as hist
JOIN mig._cnv_pk_tesis as cnv ON cnv.tesis_g2 = hist.tesis
JOIN sga_tesis as tes ON cnv.tesis = tes.tesis
ORDER BY hist.fecha;
Iris, en alguna carrera tienen actividades extracurriculares?
Porque de ser asi, ahora para los scripts d ela version 3.19 se agreg{o la migración de lo que faltaba realizar sobre actividades extracurriculares.
Te aviso como veo que estan en proceso de migración para que sigas probando con esos scripts pero de tener actividades extracurriculares probar luego con los scripts de la version 3.19 que este mes van a estar disponibles.