在 .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”列表。
在 .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”列表。
如果您无法创建数据库链接,您还可以将数据库_1 中的所有值插入到临时表中, SELECT my_value FROM table_in_database_2
然后再进行连接。
您可能可以简单地构建一个数据库链接并通过该链接加入,但这可能会出现性能问题。像这样的东西:
在数据库 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;
是的 - 您可以为此查看数据库链接。