Моему Java-приложению необходимо некоторое время удерживать курсор в Oracle DB. Во время этого должны быть сделаны другие заявления БД. Требуется ли это для отдельных соединений БД или же (курсор один)?
Спасибо.
Моему Java-приложению необходимо некоторое время удерживать курсор в Oracle DB. Во время этого должны быть сделаны другие заявления БД. Требуется ли это для отдельных соединений БД или же (курсор один)?
Спасибо.
Единственное ограничение состоит в том, что один оператор может иметь только один ResultSet в данный момент времени. Обратите внимание, что оператор может создавать несколько ResultSets, но вы должны обращаться к ним последовательно (используя getNextResult()
)
Чтобы иметь множественные открытые ResultSets/Cursors вам нужно несколько объектов java.sql.Statement
.
В одном соединении может быть только один активный (то есть работающий) оператор. Поэтому, если вам нужно несколько открытых курсоров (ResultSets), вы должны последовательно запускать их (один за другим) со своим собственным объектом Statement
.
У 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.
Конечно, вы можете удерживать несколько открытых курсоров, когда вы отправляете другие запросы в одном и том же соединении. Тем не менее, невозможно выпустить другие запросы или инструкции, пока первый курсор открывается. Это потому, что только один запрос может быть активным (т.е. Выполняться) в сеансе Oracle в любой момент времени.
Вы можете использовать концепцию объединения базы данных.
Он предоставляет пул подключений к базе данных, поэтому при необходимости вы можете получить соединение с базой данных из пула.
Он также оптимизирован для памяти, поскольку соединение с базой данных и закрытие - это тяжелый процесс.