Поддерживает ли Oracle DB несколько (параллельных) операций для каждого соединения?

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

Спасибо.

Ответ 1

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

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

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

Ответ 2

У 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.

Ответ 3

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

Ответ 4

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

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

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

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