2011-12-24 60 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