2012-04-14 144 views
1

我正在運行一個Java方法來調用Oracle 11.2數據庫中的存儲過程。我正在使用JDBC連接調用具有OUT參數的存儲過程,以將數據庫遊標作爲結果集返回給java方法。一切工作正常。Java和數據庫:關於使用多個ResultSet和遊標

現在我想返回第二個結果集到SAME存儲過程中的java方法。如果我只是將第二個OUT參數添加到此存儲過程並打開第二個遊標,則所有內容似乎都可以正常工作。

我想知道如果這是正確的做法,因爲兩個遊標都是簡單地在存儲過程中打開,依靠java方法關閉它們。

由於第一個光標是OPEN ed,之後選擇了一些東西,然後第二個光標是OPEN,選擇了不同的東西,會導致遊標或結果集出現問題嗎?選擇的第二個東西是否會搞砸所選的第一個東西,反之亦然?或者數據庫足夠聰明,知道何時打開第二個光標,是否有新的選擇指向它,而不是第一個光標打開?

我對這一切都很陌生,只是想檢查它是如何將多個遊標返回到java中的相應結果集。感謝您的任何意見。

回答

2

兩個遊標都是完全不同的實體,它們指向完全不同的查詢,它們返回完全不同的SCN的結果。所以不存在數據庫混淆的風險。您的Java代碼將單獨獲取需要從單獨獲取的ResultSet對象,因此您的代碼需要確保它從正確的ResultSet獲取 - 如果有任何混淆,它更可能是代碼中的一個錯誤,在所有情況下都從錯誤的光標中提取或未能關閉兩個遊標。

雖然技術上很可能從存儲過程中返回多個遊標,但我傾向於懷疑存在更好的解決方案。大多數情況下,如果有多個相關的遊標,這意味着調用代碼是手動編碼某種連接操作。如果是這種情況,那麼讓Oracle進行加入並返回一個REf CURSOR會更好。

+0

完美,謝謝Justin! – ggkmath 2012-04-14 21:37:11