7

Oracleインスタンスにいくつかのパッケージがあります。データベースを最初から再作成すると、無効なオブジェクトはゼロになり、liquibaseからの警告は表示されません。

次に、次のようにパッケージメソッドを呼び出すと次のようになります。

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

次のエラーが発生します。

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

無効なオブジェクトを再度チェックしても、何も表示されません。CALENDAR_MANAGEMENTのコンパイルは、エラーなしで正常に完了します。

完全なスキーマの再コンパイルを試みましたが、うまくいきませんでした。

SQLDeveloperから呼び出すと、正常に動作します。

4

1 に答える 1

2

統合チェックでこのエラーが発生しましたが、実行中にパッケージの有効性をチェックすることは考えていませんでした。

パッケージの呼び出しの直前に簡単なコードをドロップします。

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

別のテストがそれ自体でクリーンアップされていないことがわかりましたが、これはクリーンアップされていたため、前後のDBを見ると問題なく見えました。

于 2012-04-20T16:59:37.203 に答える