2012-04-19 16 views
7

Ho alcuni pacchetti sulla mia istanza di Oracle. Quando ricreavo il mio database da zero, ottengo zero oggetti non validi e nessun avviso da parte di Liquibase.Oracle 10g che afferma che un corpo del pacchetto ha errori quando non è

Poi, quando chiamo un metodo di pacchetto, in questo modo:

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

Mi dà il seguente errore:

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 

Controllo per gli oggetti non validi gira di nuovo a nulla. La compilazione di CALENDAR_MANAGEMENT si completa di nuovo normalmente senza errori.

Ho provato a ricompilare uno schema completo, ma non ha funzionato.

Quando lo chiamo da SQLDeveloper, funziona normalmente.

+0

Lo stai usando usando lo stesso account in Java e SQLDeveloper? –

+0

Sì. Entrambi i conti sono uguali. Per garantire che non ci fossero differenze, ho effettuato il login come sistema e ho eseguito anche il pacchetto 'show errors ETPDEV.CALENDAR_MANAGEMENT'. Nessun errore –

+3

Hai detto che entrambi gli account sono uguali ma stanno entrambi effettuando l'accesso esattamente come lo stesso utente? Questo sembra un classico problema di permessi. – Ollie

risposta

2

Stavo correndo questo errore nei miei assegni di integrazione e non pensavo di verificare la validità del pacchetto WHILE in esecuzione.

Eliminazione di un semplice pezzo di codice a destra prima della chiamata per il pacchetto:

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

ho scoperto che un test diverso non è stato pulizia dopo se stessa, ma questo era, così quando ho guardato il DB prima e dopo, andava bene.

Problemi correlati