oracle - ORA-02019: 未找到远程数据库的连接描述 - 在视图中左连接
问题描述
我有 3 张桌子:
table1: id, person_code
table2: id, address, person_code_foreing(same with that one from table 1), admission_date_1
table3: id, id_table2, admission_date_2, something
(表格是虚构的)
我正在尝试创建一个使用左连接从这 3 个表中获取信息的视图 ,我这样做是因为在第一个表中我有一些记录在其他表中没有 person_code 但我也想要这个视图返回的信息:
CREATE OR REPLACE VIEW schema.my_view
SELECT t1.name, t2.adress, t3.something
from schema.table1@ambient1 t1
left join schema.table2@ambient1 t2
on t1.person_code = t2.person_code_foreing
left join schema.table3@ambient1 t3
on t3.id_table2 = t2.id
and t1.admission_date_1=t2.admission_date_2;
此视图需要在另一个环境 (ambient2) 中创建。
我尝试使用子查询,我还需要使用左连接,这很令人困惑,因为我不明白,子查询和左连接是最大的禁忌?!或者只是de left-join?!
这发生在任何人身上吗?你是怎么解决的?
非常感谢。
解决方案
ORA-2019 表示您的数据库链接 (@ambient1) 不存在,或者对当前用户不可见。您可以通过检查 ALL_DB_LINKS 视图进行确认,该视图应列出用户有权访问的所有链接:
select owner, db_link from all_db_links;
还要记住,Oracle 将在进行调用的数据库中执行联接,而不是远程数据库,因此您几乎可以肯定必须通过网络将所有三个表的全部内容写入 TEMP 以进行联接,然后每次运行查询时都被丢弃。您还将失去对数据的任何索引的好处,并且很可能以对本地数据库中的临时表进行全表扫描而告终。
我不知道这是否适合您,但是从性能角度来看,并且鉴于它没有与本地数据库中的任何内容连接,因此在远程数据库中创建视图并仅查询会更有意义即通过数据库链接。这样,所有的连接都在数据所在的地方有效地执行,只有结果集通过网络推送,并且您的客户端数据库 SQL 变得更加简单。
推荐阅读
- go - golang-echo-realworld-example-app 的存储库模式
- java - Axon amqp 消息传递,未触发事件处理程序
- keras - 在训练期间恢复非规范化数据
- java - 如何使用 java 代码发布 jcr 节点?
- vba - 排序如何影响约会搜索的结果?
- java - 使用 Arraylist Java 进行选举
- vue.js - 在 VuePress 中显示 Vue 组件
- swift - Swift:RegEx 未返回预期结果
- javascript - Plotly js gd.data 必须是一个数组
- c# - ZeroMQ (NetMQ) Dealer / Router Socket 可扩展性问题