gpt4 book ai didi

Oracle访问多个数据库

转载 作者:行者123 更新时间:2023-12-04 17:20:21 25 4
gpt4 key购买 nike

我使用的是 Oracle SQL Developer 4.02.15.21 版。

我需要编写一个访问多个数据库的查询。我想要做的就是获取每个数据库中“TableX”中存在的所有 ID 的列表(每个数据库中都有一个 Table1 的实例,但具有不同的值)并将所有结果合并到一起一份大 list 。

我的问题来自访问超过 4 个数据库——我收到此错误:ORA-02020:正在使用的数据库链接过多。我无法更改 INIT.ORA 文件的 open_links 最大限制。

所以我尝试动态打开/关闭这些链接:

SELECT Local.PUID FROM TableX Local
UNION ALL
----
SELECT Xdb1.PUID FROM TableX@db1 Xdb1;
ALTER SESSION CLOSE DATABASE LINK db1
UNION ALL
----
SELECT Xdb2.PUID FROM TableX@db2 Xdb2;
ALTER SESSION CLOSE DATABASE LINK db2
UNION ALL
----
SELECT Xdb3.PUID FROM TableX@db3 Xdb3;
ALTER SESSION CLOSE DATABASE LINK db3
UNION ALL
----
SELECT Xdb4.PUID FROM TableX@db4 Xdb4;
ALTER SESSION CLOSE DATABASE LINK db4
UNION ALL
----
SELECT Xdb5.PUID FROM TableX@db5 Xdb5;
ALTER SESSION CLOSE DATABASE LINK db5

然而,这会产生“ORA-02081:数据库链接未打开”。最后关闭哪个数据库。

有人可以建议对上述内容进行替代或调整吗?

如果可能,请使用语法正确的 SQL 提供一小部分建议。

最佳答案

如果您无法更改 open_links 设置,则您无法使用单个查询从您要查询的所有数据库中进行选择。

如果您的要求是通过数据库链接查询大量数据库,那么更改open_links 设置似乎非常合理。如果你有一组人告诉你你需要做 X(从大量表中查询数据)而另一组人告诉你你不能做 X,那么这两组人几乎总是有意义的讨论并找出哪个命令获胜。

如果我们可以在不编写单个查询的情况下解决问题,那么您就有了选择。例如,您可以编写一些 PL/SQL,依次从每个表中选择数据并对其执行某些操作。根据所涉及的数据库链接的数量,编写一个循环为每个数据库链接生成动态 SQL 语句、执行 SQL,然后关闭数据库链接可能是有意义的。

如果您需要为用户提供运行返回所有数据的单个查询的能力,您可以编写一个流水线表函数,用动态 SQL 实现这种循环,然后让用户查询流水线表功能。这实际上并不是从所有表中获取数据的单个查询。但它与您在不修改 open_links 限制的情况下可能获得的结果一样接近。

关于Oracle访问多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24616618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com