2012-10-25 105 views
1

我有一個Java應用程序在Weblogic服務器上運行並連接到Oracle 11g數據庫服務器。從Java調用數據庫時,程序無法正常工作

在應用程序中,我調用了一個數據庫過程並傳遞一個參數給它,它傳遞並調用多個其他過程。

當我獨立測試過程時,它完美地工作並如預期。

當我從Java應用程序調用過程時,問題就出現了。

的程序提供了一個錯誤:

ORA-06508: PL/SQL: could not find program unit being called

回溯導致呼叫存在於另一個模式,並在我的當前模式的代名詞的過程。

如果有其他人面臨同樣的問題或類似問題,請幫助。

編輯#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電話是{調用Proc_CALL(?)}

+3

發佈調用存儲過程的代碼。 – duffymo

+0

Java應用程序使用的Oracle用戶是否有權訪問該過程? – gorzan

+0

@duffymo:無法發佈代碼。公司政策。 –

回答

0

我可能已經發現了這個問題。雖然它聽起來很奇怪,但它似乎工作:

我正在處理的系統有3個Schema連接。

一個是從中進行所有調用的暫存架構。 其次是調用的主模式。被調用的過程存在於該模式中。

第三個是另一個模式,其中存在一個正在從主模式過程調用的過程。

簡體:

StageSchema.Caller(Synonym)-->>

MainSchema.Proc_Call(Procedure)-->>

CoSchema.insideCall(Procedure).

贈款到CoSchema是可利用的主要模式,而不是在舞臺模式。

雖然根據理論,如果任何過程被授予一個模式,那麼所有內部調用任何其他程序應該沒有關係。

但在這種情況下,當我給予舞臺架構的授予,那麼一切似乎完美。

如果任何人有解決方案,那麼請分享原因相同。

0

這聽起來我好像你的同義詞是南轅北轍 - 調用模式需要一個被調用過程+權限來執行的同義詞。

+0

不正確。如果是這樣的話,我的程序就不會編譯。所有的贈款已經執行,只是爲了重新確保,我已經完成了所有對象的兩種方式 –

+0

您是否在兩種情況下使用完全相同的用戶名/架構? –

+0

基本上我從數據轉換架構調用主架構對象。並且主Schema中的授權已經提供給Staging模式,並且已在Main模式中爲調用創建了同義詞。當發生錯誤時,它正處於同義詞調用點 –

相關問題