Вложенные запросы из нескольких баз данных Oracle
В.NET, возможно ли выполнить вложенный запрос из двух отдельных баз данных Oracle?
Например
"ВЫБЕРИТЕ my_value, ОТ таблицы_в_библиотеке_1 ГДЕ my_value IN (ВЫБРАТЬ my_value ОТ таблицы_Д_Базы_2)"
Если так, как бы я поступил так?
В конечном счете, это попытка преодолеть ошибку "ORA-01795", используя оператор "in" с более чем 1000 элементами в условном списке, без необходимости разбивать запрос на несколько списков "OR value IN".
3 ответа
Возможно, вам удастся просто создать ссылку на базу данных и присоединиться к ней, но это может иметь проблемы с производительностью. Что-то вроде этого:
Создать ссылку на базу данных 2 на базу данных 1.
CREATE DATABASE LINK db2 CONNECT TO user IDENTIFIED BY pw USING tns-alias;
Присоедините вашу таблицу в базе данных 1 к таблице в базе данных 2:
SELECT my_value
FROM table_in_database_1 t1 JOIN table_in_database_2@db2 t2
ON t1.my_value = t2.my_value
В зависимости от производительности ссылки вы можете использовать для этого гибридный подход, включающий как ссылку на базу данных, так и временную таблицу.
Создайте ссылку на базу данных, как указано выше. Создайте временную таблицу в базе данных 1, которая содержит значения, которые будут использоваться в подзапросе из базы данных 2.
CREATE GLOBAL TEMPORARY TABLE db2_values (value VARCHAR2(20));
Скопируйте значения из db2 в db1:
INSERT INTO db2_values
SELECT my_value
FROM table_in_database_2@db2;
Наконец, присоедините вашу таблицу базы данных 1 к временной таблице.
SELECT my_value
FROM table_in_database_1 t1 JOIN db2_values t2 ON t1.my_value = t2.value;
Если вы не можете создать ссылку на базу данных, вы также можете вставить во временную таблицу в database_1 все значения из SELECT my_value FROM table_in_database_2
и после этого сделать соединение.