Поддерживает ли Oracle DB несколько (параллельных) операций для одного соединения? - PullRequest
6 голосов
/ 10 мая 2011

Моему Java-приложению нужно некоторое время удерживать курсор на Oracle DB. Во время этого должны быть сделаны другие заявления БД. Требуется ли для этого отдельное соединение с БД или могут использоваться одни и те же (курсор одного)?

Спасибо.

Ответы [ 4 ]

6 голосов
/ 10 мая 2011

Единственное ограничение состоит в том, что один оператор может иметь только один ResultSet в данный момент времени.Обратите внимание, что оператор может производить несколько ResultSets, но вы должны обращаться к ним последовательно (используя getNextResult())

Чтобы иметь возможность иметь несколько открытых ResultSets / Cursors, вам нужно несколько java.sql.Statement объектов.

Одно соединение может иметь только один активный (т. Е. Работающий) оператор.Поэтому, если вам нужно несколько открытых курсоров (ResultSets), вам нужно запускать их последовательно (один за другим), каждый со своим собственным Statement объектом.

4 голосов
/ 10 мая 2011

У 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 голос
/ 10 мая 2011

Конечно, вы можете удерживать несколько открытых курсоров, пока вы выполняете другие запросы по тому же соединению.Однако невозможно выполнить другие запросы или операторы, пока открывается первый курсор.Это связано с тем, что в любой момент времени в сеансе Oracle может быть активен только один запрос (т. Е. Выполняется).

0 голосов
/ 10 мая 2011

Вы можете использовать концепцию пула баз данных.

Нажмите здесь

Он предоставляет пул соединений с базой данных, поэтому при необходимости вы можете получить соединение с базой данных из пула.

Кроме того, оптимизирована память, поскольку подключение и закрытие базы данных - сложный процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...