UNPA_error al modificar legajo de alumno

Estimados, me encuentro tratando de modificar el legajo de una alumna y estoy usando un procedimiento que nos paso el SIU y que modifique un poquito para hacer foco en una de las tablas que no me deja modificar.

– Creating procedure
CREATE PROCEDURE sp835_cambia_leg ( pUA LIKE sga_alumnos.unidad_academica, pCarrera LIKE sga_alumnos.carrera, pleg_viejo LIKE sga_alumnos.legajo , pleg_nuevo LIKE sga_alumnos.legajo, pNRO_INSCRIPCION LIKE aca_usuarios_ag.nro_inscripcion)

Returning INTEGER

– 0 Error || 1 OK

             ,VARCHAR(255)   ;

– Mensaje

-- Variables para el manejo de excepciones

DEFINE SQL_Err             INTEGER;

DEFINE ISAM_Err          INTEGER;

DEFINE error_Info          VARCHAR(76);

–SET DEBUG FILE TO “c:\updleg.txt”;

– TRACE ON;

BEGIN

  ON EXCEPTION SET sql_err, isam_err, error_info                                        

       ROLLBACK WORK;

            return 0,'Error en la ejecuci?n: ' || sql_err  || '-' ||  error_info ;

   raise exception  sql_err, isam_err, error_info;

 END EXCEPTION;  


    If Exists (Select * from sga_alumnos where unidad_academica = pUA and carrera = PCarrera and legajo = pleg_viejo) Then

        -- sigo
    Else
        return 0,'No se encontr? el legajo para esos parametros';

    End if;


BEGIN WORK;

– trace 'antes del update ’ ;

SET CONSTRAINTS ALL DEFERRED;

SET triggers for sga_det_perd_regul disabled;
UPDATE sga_det_perd_regul SET legajo = pleg_nuevo WHERE unidad_academica = pUA and carrera = PCarrera and legajo = pleg_viejo;
SET triggers for sga_det_perd_regul enabled;

– trace 'luego del update ’ ;

    COMMIT;

    RETURN 1,'Todo bien.';

END;

– trace off;

END PROCEDURE;

EXECUTE PROCEDURE sp835_cambia_leg (‘UARG’,‘046’,‘1-92592873/99’,‘1-18823667/99’, ‘MIGRG-4402’);

El error que obtengo al ejecutar este procedimiento es:

Error en la ejecuci?n: -242-dba.sga_det_perd_regul

Alguna idea de que puede ser? Este mismo procedimiento para otras carreras de la alumna funciona correctamente, lo único que veo que la carrera 046 fue migrada.

Saludos Fernando.

Hola Fernando, el error -242 dice lo siguiente:

-242 Could not open database table table-name.

The database server cannot begin reading a table. Check the accompanying ISAM error code for more information. The problem might be file permissions, a hardware error, or a corrupted system catalog. Unless the ISAM error code or an operating-system message points to another cause, run the bcheck or secheck utility to verify file integrity.

¿Puede ser que esa tabla tenga algun problema en los datos?

Si corres una consulta sobre esa tabla devuelve todos los registros o te da ese error -242?

SELECT * FROM dba.sga_det_perd_regul ;

Si da error, podes correr desde linea de comandos en el servidor, logueandote con usuario informix el comando oncheck sobre esa tabla,

oncheck -c opciones nombre_base.sga_det_perd_regul

Fijate las opciones del ONCHECK en este foro:

Hola Alejandro!!

Ejecute la consulta SELECT * FROM dba.sga_det_perd_regul ; en la base de datos y me devuelve registros normalmente.
Realice los onchecks y adjunto las salidas.

oncheck_cd.txt (57 Bytes)
oncheck_ci.txt (318 Bytes)
oncheck_pk.txt (3,3 MB)
oncheck_pt.txt (4,3 KB)

Si borras la siguiente FK y la volves a crear, da algun error o la crea sin problemas?

ALTER TABLE sga_det_perd_regul
ADD CONSTRAINT FOREIGN KEY (UNIDAD_ACADEMICA, CARRERA, LEGAJO, ANIO_ACADEMICO, PERDIDA_REGULAR)
REFERENCES sga_perdidas_regul CONSTRAINT fk_per_red_per_reg;

Hola Alejandro! ejecute:

ALTER TABLE sga_det_perd_regul
DROP CONSTRAINT fk_per_red_per_reg;

ALTER TABLE sga_det_perd_regul
ADD CONSTRAINT FOREIGN KEY (UNIDAD_ACADEMICA, CARRERA, LEGAJO, ANIO_ACADEMICO, PERDIDA_REGULAR)
REFERENCES sga_perdidas_regul CONSTRAINT fk_per_red_per_reg;

Sin problemas.

Corre un UPDATE STATISTICS sobre la base.

Luego, estas consultas devuelven la misma cantidad de registros?
select count(*) from sga_det_perd_regul;
select * from sga_det_perd_regul;

Buen día Alejandro!
si devuelve la misma cantidad de registros (38031).

Hola, entiendo que al ejecutar esto:

EXECUTE PROCEDURE sp835_cambia_leg (‘UARG’,‘046’,‘1-92592873/99’,‘1-18823667/99’, ‘MIGRG-4402’);

Te da este error :

Error en la ejecuci?n: -242-dba.sga_det_perd_regul

SI haces un unload de la tabla sga_det_perd_regul a un archivo plano te lo genera bien ?
conta los registros de la tabla con
select count(*) from sga_det_perd_regul ;

y compara con los registros en el archivo generado con UNLOAD, son iguales ?

1-Yo probaria creando una tabla igual, con otro nombre x ej sga_det_perd_regul_nue
2-cargandola desde el archivo plano
3-renombrar la tabla original sga_det_perd_regul → sga_det_perd_regul_old
4-renombrar los indices y constraints de la tabla original
5- agregarle a la nueva tablas todos lo indices y constraints, yy triggers que pudiera tener la tabla original
6-hacer un switch de los nombres de las tablas sga_det_perd_regul_nue → sga_det_perd_regul

7- probar si el error sigue dando

Hay veces que las tablas de Informix se corrompen, y eso no se arregla con oncheck ni con ningun otro comando la unica forma de arreglarlo es crear una tabla desde cero nuevamente
Pero siempre teniendo cuidado de tener un backup de la tabla original

No se que dice Ale Delu, pero yo te sugiero probar recreando la tabla desde cero

saludos
Ignacio