我正在一个模式中编写代码,并且希望从另一个模式中提取一个表。我可以访问其他架构,但是无法授予该架构中的表的权限。
我已经看过以前的代码,它使用'@'语句,例如Select * from X.Tablename@Y.K
我的问题是我想X,Y和K代表什么?
我尝试了以下代码,但是没有用:
select * from tablename@schemaname
该错误消息指出连接存在问题,因此我认为我没有正确使用@函数。我找不到东西。
答案 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中选择*
我希望这会有所帮助。