Estimados, a raíz de la consulta de una de las oficinas de alumnos con la operación de marras (en la que no daban los números) revisé el SP que arma dicho reporte: sp_folios_faltan.
El mismo arranca armando una tabla temporal donde guarda los números de folio de las actas de examen y las de promoción (?) y luego toma el valor menor y el mayor. Luego va recorriendo folio por folio y buscando huecos, los cuales al final informa.
El problema mas grande es que cuando arma ese listado de folios la consulta hace un producto cartesiano.
En nuestro caso, por ejemplo, tenemos actas rectificativas en un libro y las actas normales en otro. Y cuando vemos la información que devuelve ese select mezcla libros y actas. Por otro lado, tipo_acta es parte de la llave en ambas tablas, por lo tanto debiera estar dentro de la consulta.
Código original:
CREATE TEMP TABLE tmp_folios_fisicos (folio integer);
INSERT INTO tmp_folios_fisicos
SELECT sga_folios.folio_fisico
FROM sga_folios, sga_actas_examen
WHERE sga_actas_examen.unidad_academica = p_ua
AND sga_actas_examen.libro = p_libro
AND sga_folios.acta = sga_actas_examen.acta
AND sga_folios.folio_fisico is not null;
Código propuesto:
CREATE TEMP TABLE tmp_folios_fisicos (folio integer);
INSERT INTO tmp_folios_fisicos
SELECT sga_folios.folio_fisico
FROM sga_folios, sga_actas_examen
WHERE sga_actas_examen.unidad_academica = p_ua
AND sga_actas_examen.libro = p_libro
AND sga_folios.acta = sga_actas_examen.acta
AND sga_folios.tipo_acta = sga_actas_examen.tipo_acta
AND sga_folios.folio_fisico is not null;
Les ruego que verifiquen si estoy equivocado.
Saludos y gracias
Juan