1

Java アプリケーションを Weblogic サーバー上で実行し、Oracle 11g DB サーバーに接続しています。

アプリケーションでは、DB プロシージャを呼び出し、他の複数のプロシージャと通信して呼び出すパラメータを渡します。

プロシージャを個別にテストすると、期待どおりに完全に機能します。

この問題は、Java アプリケーションからプロシージャを呼び出すときに発生します。

手順でエラーが発生します。

ORA-06508: PL/SQL: コールされているプログラム・ユニットが見つかりませんでした

バックトレースは、別のスキーマに存在し、現在のスキーマにシノニムを持つプロシージャーへの呼び出しにつながります。

他の誰かが同じ問題または同様の問題に直面している場合は、助けてください。

編集#1:DB Procを呼び出すためのサンプルコード

CallableStatement cstmt = null;
private Connection dbConn = null;
HashMap hashMap = new HashMap();
hashMap.put(DBDRIVER, driverType);
hashMap.put(USERID, userName);
hashMap.put(PASSWORD, password);
hashMap.put(SID, dbName);
hashMap.put(IPADDRESS, intDBServer);
hashMap.put(PORT, dbPort);
dbConn = (Connection)cmmObj.connect(hashMap);
cstmt = dbConn.prepareCall(queryToRun);
cstmt.setString(1, ReqId);
cstmt.executeUpdate();

Proc Call は { call Proc_CALL(?) }

4

2 に答える 2

0

あなたの同義語が間違っているように思えます-呼び出し元のスキーマには、呼び出されたプロシージャと実行する権限の同義語が必要です。

于 2012-10-25T12:21:13.423 に答える
0

私はおそらく問題を見つけました。それを聞くのは奇妙に思えますが、うまくいくようです:

私が取り組んでいたシステムには、3 つのスキーマが接続されています。

1 つは、すべての呼び出しが行われるステージング スキーマです。2 番目は、呼び出しが行われたメイン スキーマです。呼び出されたプロシージャはこのスキーマに存在しました。

3 つ目は、メイン スキーマ プロシージャから呼び出されたプロシージャが存在する別のスキーマです。

簡略化:

StageSchema.Caller(同義語)-->>

MainSchema.Proc_Call(手続き) -->>

CoSchema.insideCall(プロシージャ)。

CoSchema への許可は、メイン スキーマでは使用できましたが、ステージ スキーマでは使用できませんでした。

理論上、Any Procedure がスキーマに付与されている場合、他のプロシージャーへのすべての内部呼び出しは重要ではありません。

しかし、この場合、Stage Schema に許可を与えると、すべてが完全に機能するように見えました。

誰かがこれに対する解決策を持っている場合は、同じ理由を共有してください。

于 2012-10-25T14:10:14.463 に答える