2017-04-24 58 views
1

我的數據庫示例中有多個存儲過程:proc1,proc2,... proc10。從Java調用多個Oracle存儲過程

我想從java中調用它們。爲避免多次網絡旅行,重複編譯和性能,最好的方法是什麼?

這是我現在有:

for (int i = 1; i <= 10; i++) 
{ 
    CallableStatement stmt = conn.prepareCall("call proc"+i); 
    stmt.execute() 
} 

我並不想執行一個頂層程序調用這些程序10,我想從我的代碼,這些處決的更多的控制。例如,我執行5個過程後可能會遇到中斷,並可能需要上下文切換。當我在服務器端執行頂級過程時,我無法做到這一點

+1

是什麼讓你尋找另一種解決方案不是一個你有?對於你給定的約束條件,它看起來很合理。如果這些調用經常發生,您可能希望將'CallableStatement'保存在一個數組中。 –

回答

2

一種方法是編寫另一個存儲過程,按順序調用proc1proc10。調用「超級程序」應該是一次往返。

參考:


我[...]必須排除的選擇,因爲我想從我的代碼,這些處決的更多的控制。

如果您需要從您的代碼中進行控制,那麼您現在正在做的幾乎沒有其他選擇。在您的代碼中進行控制,意味着您的代碼必須在每次對存儲過程的調用之間執行。這反過來意味着(至少)每次通話之間的往返旅程。

(我想,你可以寫,也可能產生對你的每一個場景中不同的尤伯杯的過程。但是,這是基本相同,我的建議。)

+0

謝謝。我想過,但不得不排除該選項,因爲我想從我的代碼中更多地控制這些執行。例如,我執行5個過程後可能會遇到中斷,並可能需要上下文切換。當我在服務器端執行頂層過程時,我無法做到這一點。 –

+0

再次感謝。最後一個問題,無論如何將批量執行幫助我試圖實現?我能控制住兩者之間嗎? –

+0

不,你不會。閱讀javadoc的executeBatch。 –