2

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

例如

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

如果是这样,我将如何去做?

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

4

3 回答 3

1

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

于 2011-07-21T15:24:16.270 回答
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;
于 2011-07-21T16:28:46.820 回答
0

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

于 2011-07-21T14:51:28.337 回答