Oracle数据库是否支持每个连接多个(并行)操作?

6
我的Java应用程序需要在一段时间内保持对Oracle数据库的光标。在此期间,需要执行其他数据库语句。这是否需要使用单独的数据库连接或者可以使用相同的(光标的)连接?
谢谢。

你试过了吗?那给出了什么结果? - Mat
你谈论的是什么类型的Java应用程序?Oracle对于处理一系列语句的专用会话非常好。然而,大多数Java应用程序是Web应用程序,并且Web应用程序通常使用无状态协议和连接池。这意味着很难为特定用户保留一个数据库会话以在一段时间内发出命令。所以,请提供更多细节。同时,你是指“parallel”还是应该是“sequential”?Oracle支持并行查询/DML,但这是一个不同的问题。 - APC
4个回答

6
唯一的限制是在任何给定时间单个语句只能有一个ResultSet。请注意,一个语句可以生成多个ResultSet,但您必须按顺序访问它们(使用getNextResult())。
为了能够拥有多个打开的ResultSets/Cursors,您需要多个java.sql.Statement对象。
单个连接只能有一个活动的(即正在运行的)语句。因此,如果您需要多个打开的游标(ResultSets),则需要逐个运行它们(一个接一个),每个都有自己的Statement对象。

4

Oracle对MSSQL中所谓的MARS(多活动结果集)没有任何问题。

你可以在很多PL/SQL代码中看到这种情况,事实上,PL/SQL“只是”SQL引擎的客户端,就像你的Java代码一样:

for a in (select field1, field2 from table1) loop
  for b in (select * from table2 where SomeField = a.Field1) loop
    ...
  end loop;
end loop;

不过,不要只听我的话。您可以在Java中自己创建像这样的嵌套循环。


1
当您在同一连接上发出其他查询时,当然可以同时“保持”多个打开的游标。但是,在第一个游标被打开时不可能发出其他查询或语句。这是因为在任何时间点上,Oracle会话中只能有一个请求处于活动状态(即正在执行)。

0

您可以使用数据库池的概念。

点击这里

它提供了一个数据库连接池,因此每当需要时,您都可以从池中获取数据库连接。

它还进行了内存优化,因为数据库连接和关闭是一个繁重的过程。


问题的重点在于,楼主不想要多个连接,但是想知道是否可以在保持游标打开的同时执行其他SQL语句 - 这是可以做到的! - James Anderson
是的,我可以(而且可能会)使用连接池,但正如詹姆斯所指出的那样,问题是关于使用相同的连接。 - Ralkie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接