Вложенные запросы из нескольких баз данных Oracle

В .NET возможно ли запустить вложенный запрос из двух отдельных баз данных Oracle?

E.g.

"ВЫБЕРИТЕ мое_значение, ИЗ таблицы_в_базе_данных_1, ГДЕ мое_значение В (ВЫБЕРИТЕ мое_значение ИЗ таблицы_в_базе_данных_2)"

Если да, то как мне это сделать?

В конечном счете, это попытка преодолеть ошибку «ORA-01795» из-за использования оператора «in» с более чем 1000 элементов в условном списке без необходимости разбивать запрос на несколько списков «ИЛИ значение IN».


person n00b    schedule 21.07.2011    source источник


Ответы (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;
person DCookie    schedule 21.07.2011

Если вы не можете сделать ссылку на базу данных, вы также можете вставить во временную таблицу в базе данных_1 все значения из SELECT my_value FROM table_in_database_2 и после этого выполнить соединение.

person Florin Ghita    schedule 21.07.2011
comment
Как бы вы получили данные из базы данных 2 в базу данных 1 без ссылки? - person DCookie; 21.07.2011
comment
@Dcookie - вы могли бы сделать это во внешнем интерфейсе, если бы вам пришлось. Выполнить запрос к базе данных 2; вставьте эти данные в таблицу в базе данных 1; выполнить запрос к базе данных 1. - person Dave Costa; 21.07.2011
comment
Дэйв Коста прав, прочитайте последнее предложение; он выполняет запросы к обеим базам данных; у него две связи :) - person Florin Ghita; 22.07.2011
comment
Поверю вам на слово ;-) Итак, что вы в конечном итоге сделаете, так это выберете список db2 в свою программу, а затем вставите его в db1? - person DCookie; 22.07.2011

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

person diagonalbatman    schedule 21.07.2011