来自多个Oracle数据库的嵌套查询

时间:2011-07-21 14:48:20

标签: .net vb.net oracle nested-queries

在.NET中,是否可以从两个单独的Oracle数据库运行嵌套查询?

E.g。

“选择my_value,  FROM table_in_database_1  WHERE my_value IN(选择my_value                      FROM table_in_database_2)“

如果是这样,我该怎么做呢?

最终,这是在条件列表中使用带有超过1000个项目的“in”语句来克服“ORA-01795”错误,而不必将查询分解为多个“OR值IN”列表。

3 个答案:

答案 0 :(得分:1)

如果您无法建立数据库链接,您还可以在database_1中的临时表中插入SELECT my_value FROM table_in_database_2的所有值,然后再进行连接。

答案 1 :(得分:1)

您可以通过简单地构建数据库链接并加入该链接来逃避,但这可能会导致性能问题。像这样:

在数据库1上建立数据库2的链接。

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;

答案 2 :(得分:0)

是的 - 您可以查看数据库链接。