【问题标题】: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 中选择 *

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 2011-03-22
      • 2012-12-26
      • 1970-01-01
      • 2019-06-29
      • 2010-09-24
      • 2012-06-25
      相关资源
      最近更新 更多