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

发布于 2024-11-25 13:44:58 字数 285 浏览 1 评论 0原文

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

例如

“选择我的值, 来自数据库中的表_1 WHERE my_value IN ( 选择 my_value FROM table_in_database_2 )"

如果是这样,我将如何执行此操作?

最终,这是为了克服在条件列表中使用包含超过 1000 个项目的“in”语句时出现的“ORA-01795”错误,而无需中断将查询输出到多个“OR value IN”列表中。

In .NET, Is it possible to run a nested query from two separate Oracle databases?

E.g.

"SELECT my_value,
FROM table_in_database_1
WHERE my_value IN ( SELECT my_value
FROM table_in_database_2 )"

If so, how would I go about doing this?

Ultimately, this is an effort to overcome an "ORA-01795" error from using an "in" statement with over 1000 items in the conditional list, without having to break the query out into multiple "OR value IN" lists.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

迷爱 2024-12-02 13:44:58

您也许可以简单地构建数据库链接并通过该链接加入,但这可能会带来性能问题。像这样的事情:

在数据库 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;

You might be able to get away with simply building a database link and joining over that link, but that can have performance issues. Something like this:

Build a link to database 2 on database 1.

CREATE DATABASE LINK db2 CONNECT TO user IDENTIFIED BY pw USING tns-alias;

Join your table on database 1 to the table on database 2:

SELECT my_value 
  FROM table_in_database_1 t1 JOIN table_in_database_2@db2 t2
       ON t1.my_value = t2.my_value

Depending on the performance of the link, you may opt to use a hybrid approach for this, involving both a database link and a temporary table.

Build a database link as above. Build a temporary table on database 1 that holds the values to be used in the subquery from database 2.

CREATE GLOBAL TEMPORARY TABLE db2_values (value VARCHAR2(20));

Copy the values from db2 to db1:

INSERT INTO db2_values
SELECT my_value 
  FROM table_in_database_2@db2;

Finally, join your database 1 table to the temporary table.

SELECT my_value
  FROM table_in_database_1 t1 JOIN db2_values t2 ON t1.my_value = t2.value;
や莫失莫忘 2024-12-02 13:44:58

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

If you can't make a database link, you can also insert into a temp table in database_1 all values from SELECT my_value FROM table_in_database_2 and after that make the join.

月下伊人醉 2024-12-02 13:44:58

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

Yes - you can look into Database Links for this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文