2011-12-24 56 views
1

我在Java中有一個生產者線程,每n毫秒從Oracle表中拉項目。 當前的實現依賴於一個Java時間戳來檢索數據,而不再重新檢索它們。在同一個PL/SQL查詢中選擇並更新

我的目標是擺脫時間戳模式,並直接更新我從數據庫中提取的相同項目。

有沒有辦法選擇一組項目,並同時更新它們以標記爲「正在處理」?

如果不是,那麼依賴IN子句的獨立UPDATE查詢會是一個主要的性能問題嗎? 我嘗試過使用臨時表來達到這個目的,但是我看到性能受到嚴重影響。

不知道它是否有幫助,但應用程序正在使用iBatis。

+1

由於oracle 10g有更新語句的RETURNING子句,但我相信它們可以用於多行一行 – 2011-12-24 22:45:53

回答

5

如果您使用的是oracle 10g或更高版本,則可以使用update語句的RETURNING子句。如果你希望檢索多行,你可以使用BULK COLLECT語句。
這裏是一些例子的鏈接; http://psoug.org/snippet/UPDATE-with-RETURNING-clause_604.htm

+0

感謝看起來整潔。有關如何使用iBatis/myBatis的想法? – SiN 2011-12-24 23:06:43

+0

仍然無法找到一種將BULK COLLECT與JDBC進行通信的方式 – SiN 2011-12-29 13:55:51