Procedures en Oracle: Errores de ejecucion

Hola *ALL.

Tengo un problema que está empezando a afectar mi sistema nervioso porque no consigo saber la razón.
Tengo una procedure en Oracle (10.2) que llama a 3 procedures más.
Cuando termina de ejecutar la primera y se dispone a ejecutar la segunda, aparece el siguiente mensaje:

Connecting to the database XXXXXX.DWH.
ORA-04068: se ha anulado el estado existente de los paquetes
ORA-04065: stored procedure "DWH.P_IMS_MENSUAL_PRESENTACION" no se ha ejecutado porque se ha modificado o borrado
ORA-06508: PL/SQL: no se ha encontrado la unidad de programa llamada : "DWH.P_IMS_MENSUAL_PRESENTACION"
ORA-06512: en "DWH.P_LANZA_COMERCIAL", línea 25
ORA-06512: en línea 2
Process exited.
Disconnecting from the database XXXXXX.DWH.

Si comento la primera procedure, la segunda (la que falla) se ejecuta perfectamente.
No hace falta decir que las procedures "estan perfectas" y no tienen ni un solo fallo.
Alguna sugerencia ??

Muchas gracias !!
JosiMac

Hola Josimac

El ORA-04065 se queja de que alguien ha modificado o borrado el procedure al que se llama. Has comprobado el estado del procedure DWH.P_IMS_MENSUAL_PRESENTACION antes y después de la ejecución? Verifica sobretodo si está correctamente compilado antes y después.
A primera vista parece que el primer procedure tenga que ser el responsable de esta modificación, contiene algún CREATE OR REPLACE PROCEDURE? También podría pasar que se modificara el estado de algún objeto del que depende el segundo procedure, y este pasara a quedar en estado inválido, revisa también las dependencias.
Bueno, espero haberte ayudado, ya me dirás como acaba..

En respuesta a por Carlos

Hola Carlos y gracias por tu pronta respuesta.

No hay manera. Las procedures no tienen nada que ver las unas con las otras y cuando se ejecuta la procedure "llamante", muchas de las otras pasan a estado invalido.
Mi no explicar....

Alguna sugerencia?
Si el servidor estuviera a mi lado le daria una patada pero estoy trabajando remotamente.... :-(

aaaaaaaaaahhhggg!!!

En respuesta a por josimac

Pues sin saber lo que hace el procedure es complicado, pero se me ocurren las siguientes opciones:

  • Revisa las dependencias de todos los procedures:

Con PL/SQL Developer, por ejemplo, puedes hacerlo gráficamente.
Si no, has de consultar las vistas ALL_DEPENDENCIES, DBA_DEPENDENCIES o USER_DEPENDENCIES
Aquí tienes una query para buscar las dependencias de tus procedures:

SELECT D.NAME,D.REFERENCED_NAME,D.REFERENCED_TYPE,D.TYPE ,R.STATUS
FROM DBA_DEPENDENCIES D, (SELECT OWNER,OBJECT_NAME,STATUS,OBJECT_TYPE
                                             FROM DBA_OBJECTS
                                             WHERE OWNER NOT IN ('SYS','CTXSYS','XDB','WMSYS','WKSYS','SYSTEM','OR DSYS','ODM','MDSYS')
                                                        AND OBJECT_TYPE IN ('FUNCTION','PROCEDURE')) R
WHERE R.OBJECT_NAME=D.NAME AND R.OBJECT_TYPE=D.TYPE
           AND D.NAME IN ('TUPROCEDURE_1','TUPROCEDURE_2', '...', 'TUPROCEDURE_N )

  • Comprueba todos los que han pasado a estado inválido, han de tener un error de compilación que te de alguna pista sobre el origen del problema
     
  • Debuga la ejecución del procedure principal

Suerte!!