Вложенные запросы из нескольких баз данных 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 и после этого сделать соединение.

Да - вы можете посмотреть ссылки на базы данных для этого.

Другие вопросы по тегам