2012-04-19 20 views
7

Tengo algunos paquetes en mi instancia de Oracle. Cuando recreé mi base de datos desde cero, obtengo cero objetos no válidos y ninguna advertencia de liquibase.Oracle 10g afirmando que un cuerpo de paquete tiene errores cuando no lo hace

Entonces, cuando llamo a un método paquete, así:

new SimpleJdbcCall(jdbcTemplate).withCatalogName(packageName).withProcedureName(storedProcedureName).execute(parameterMap); 

Me da el siguiente error:

org.springframework.jdbc.UncategorizedSQLException: CallableStatementCallback; uncategorized SQLException for SQL [{call CALENDAR_MANAGEMENT.CREATE_SUMMARIES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}]; SQL state [72000]; error code [4063]; ORA-04063: package body "ETPDEV.CALENDAR_MANAGEMENT" has errors 
ORA-06508: PL/SQL: could not find program unit being called: "ETPDEV.CALENDAR_MANAGEMENT" 
ORA-06512: at line 1; 

nested exception is java.sql.SQLException: ORA-04063: package body "ETPDEV.CALENDAR_MANAGEMENT" has errors 
ORA-06508: PL/SQL: could not find program unit being called: "ETPDEV.CALENDAR_MANAGEMENT" 
ORA-06512: at line 1 

Caused by: java.sql.SQLException: ORA-04063: package body "ETPDEV.CALENDAR_MANAGEMENT" has errors 
ORA-06508: PL/SQL: could not find program unit being called: "ETPDEV.CALENDAR_MANAGEMENT" 
ORA-06512: at line 1 

Comprobación de objetos no válidos se vuelve de nuevo a nada. La compilación de CALENDAR_MANAGEMENT se completa normalmente sin errores.

He intentado una recompilación de esquema completo, pero eso no funcionó.

Cuando lo llamo desde SQLDeveloper, funciona normalmente.

+0

¿Lo está ejecutando usando la misma cuenta en Java y SQLDeveloper? –

+0

Sí. Ambas cuentas son iguales. Para asegurarme de que no había diferencia, inicié sesión como sistema y ejecuté el paquete 'show errors ETPDEV.CALENDAR_MANAGEMENT' también. Sin errores. –

+3

Usted dice que ambas cuentas son las mismas pero ¿ambas inician sesión exactamente como el mismo usuario? Esto parece un problema de permisos clásico. – Ollie

Respuesta

2

Me encontré con este error en mis comprobaciones de integración, y no pensé en verificar la validez del paquete MIENTRAS estaba ejecutándose.

Dejar caer un poco simple de código justo antes de la llamada para el paquete:

select name || ' - ' || line || ' - ' || text from user_errors order by name, sequence; 

me encontré con que una prueba diferente, no estaba limpiando después de sí mismo, pero era éste, por lo que cuando miré el DB antes y después, se veía bien.

Cuestiones relacionadas