【问题标题】:Select Table while in one schema from another Schema [closed]在另一个架构中的一个架构中选择表[关闭]
【发布时间】:2019-08-20 14:06:16
【问题描述】:
我正在一个模式中编写代码,我希望从另一个模式中提取一个表。我可以访问其他架构,但是我无法授予该架构中表的权限。
我见过以前的代码使用'@'语句,例如Select * from X.Tablename@Y.K
我的问题是我想 X、Y 和 K 代表什么?
我尝试了以下代码,但没有成功:
select * from tablename@schemaname
错误消息说连接存在问题,所以我认为我没有正确使用 @ 函数。我在上面找不到任何东西。
【问题讨论】:
标签:
sql
oracle
plsql
plsqldeveloper
【解决方案1】:
哦,在您的情况下,您需要创建 DB link 并将其与 @ 一起使用
create database link anotherschemalink connect to <another schema name> identified by <another schema password> using '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<hostname>)(PORT=<port>)) (CONNECT_DATA=(service=<service name>)))';
你可以看到tnsnames.ora这个连接数据。
现在,您将能够使用以下方法查询另一个架构表:
SELECT * FROM <ANOTHER SCHEMA TABLE NAME>@anotherschemalink;
注意:您当前的用户必须拥有CREATE DATABASE LINK 系统权限。
干杯!!
【解决方案2】:
如果我的理解正确的话,你有一个数据库有两个模式。
如果您在 SCHEMA_1 中并且想要访问 SCHEMA_2 中的 TABLE_B,那么您编写
select * from SCHEMA_2.TABLE_B
现在假设 SCHEMA_3 在另一个数据库中并且有 TABLE_C。要访问 TABLE_C,您需要一个数据库链接。数据库链接将您作为特定用户连接到其他数据库。
假设数据库链接 DB_REMOTE_3 直接将您连接为 SCHEMA_3;在这种情况下你可以写
select * from TABLE_C@DB_REMOTE_3
另一方面,如果数据库链接 DB_REMOTE_4 将您连接到另一个数据库中的 SCHEMA_4,那么您需要指定架构以及数据库链接。
select * from SCHEMA_3.TABLE_C@DB_REMOTE_3
最好的问候,
炖阿什顿
【解决方案3】:
在您的示例中,X 是另一个架构,Y.K 将是指向另一个数据库的数据库链接。如果其他架构在同一个数据库中,您将不会使用“@”。
你可能想要的是这个。
从 schemaname.tablename 中选择 *
我希望这会有所帮助。