Выполнить одновременно два запроса в Oracle SQL Developer?
Мне нужно получить довольно много данных из нашей базы данных Oracle, и для этого мне нужно запустить 20+ запросов. Есть ли способ запуска нескольких запросов за раз в одном соединении?
Я попытался использовать/для разделения запросов, но это просто открывает несколько вкладок, и запросы все равно выполняются последовательно, хотя мне не нужно их запускать один за другим.
Ответы
Ответ 1
Итак, самым простым решением для этого было использование SQL Plus, поставляемого вместе с остальным программным обеспечением Oracle. Это неуклюжий инструмент, но он делает то, что мне нужно, в то время как я могу свободно использовать SQL Developer для других запросов.
Ответ 2
Нажатие ctrl + shift + N откроет новый нераспакованный лист, который может запускать запросы параллельно. В этом случае вам нужно вставить запрос на каждую вкладку и запустить их вручную, но это удобно, просто проверяя несколько запросов.
Ответ 3
В настройках SqlDeveloper: Tools > Preferences > Database > Worksheet
установите флажок New Worksheet to use unshared connction
. Это позволит вам выполнять несколько запросов одновременно, каждый на каждой вкладке. См. снимок экрана.
Ответ 4
Нет, вам потребуется отдельный сеанс для каждого запроса.
Ответ 5
@Tony корректен, каждый запрос должен запускаться в его собственной сессии для параллельной работы. Какой инструмент вы используете? В PL/SQL Developer я могу открыть соединение с БД, а затем открыть несколько сеансов в этом соединении и запустить несколько запросов в "параллельном" - мне нужно выполнить каждый из них вручную, но если они будут занимать много времени, возможно, это будет получить то, что вам нужно, или что-то подобное в любом инструменте, который вы используете.
Ответ 6
Предполагая, что вам нравится жить опасно, вы можете запускать несколько "потоков" из одного script с помощью прагмы AUTONOMOUS_TRANSACTION. Например:
DECLARE
PROCEDURE foo(i IN PLS_INTEGER) AS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO qux
SELECT * FROM bar
WHERE baz = i;
COMMIT;
EXCEPTION WHEN OTHERS THEN ROLLBACK;
END;
BEGIN
foo(1);
foo(2);
foo(3);
END;