在一个模式中从另一个模式中选择表

时间:2019-08-20 14:06:16

标签: sql oracle plsql plsqldeveloper

我正在一个模式中编写代码,并且希望从另一个模式中提取一个表。我可以访问其他架构,但是无法授予该架构中的表的权限。

我已经看过以前的代码,它使用'@'语句,例如Select * from X.Tablename@Y.K

我的问题是我想X,Y和K代表什么?

我尝试了以下代码,但是没有用: select * from tablename@schemaname

该错误消息指出连接存在问题,因此我认为我没有正确使用@函数。我找不到东西。

3 个答案:

答案 0 :(得分: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系统特权。

干杯!

答案 1 :(得分:1)

如果我对您的理解正确,那么您将拥有一个具有两个架构的数据库。

如果您位于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

最好的问候, 炖阿什顿

答案 2 :(得分:0)

在您的示例中,X是另一个架构,Y.K是到另一个数据库的数据库链接。如果其他模式位于同一数据库中,则不会使用“ @”。

您可能想要的是这个。

  

从schemaname.tablename中选择*

我希望这会有所帮助。