Вложенные запросы из нескольких баз данных Oracle - PullRequest
2 голосов
/ 21 июля 2011

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

* 1003 Е.Г. *

"SELECT my_value, FROM table_in_database_1 ГДЕ my_value IN (ВЫБЕРИТЕ my_value FROM table_in_database_2) "

Если так, как бы я поступил так?

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

Ответы [ 3 ]

1 голос
/ 21 июля 2011

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

1 голос
/ 21 июля 2011

Возможно, вам удастся просто создать ссылку на базу данных и присоединиться к ней, но это может привести к проблемам с производительностью.Примерно так:

Создайте ссылку на базу данных 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;
0 голосов
/ 21 июля 2011

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

...