2017-05-04 36 views
-1

我正在使用Oracle 11G。如何在像select * from dbname.schemaname.table这样的查询中提供dbname和模式名称。我想知道语法。如何从正确的数据库和模式中选择?

如果我写的查询select * from employees,我得到的错误

表或视图不存在

我相信我有有的名称为dbname.schemaname.tablename,但我不知道语法。有人可以帮忙吗?

+0

为什么在连接字符串中没有提供DBname?只有在引用不同于登录用户的架构时才需要架构。数据库链接可以使用@ so来引用。'schema.table @ link'从ALL_DB_LINKS中选择*将显示登录用户可访问的链接。也许DBLink是你之后的东西? – xQbert

+0

你确定桌子是否存在?该表是一个可能在缺省HR模式下的表,*如果它已经安装了*,那么如果你没有以HR登录,你可以从hr.employees中选择*但只有当它存在于那里,有正确的权限来查看它。为什么你认为你需要'dbname',是基于不同的数据库平台? –

回答

0

首先,如果你想从另一个架构查询,你可以做这样的:

select * from HR.Employees 

其中HR是模式的名称,任何方式,你必须授予SELECT特权模式从读另外一个,或者授予DBA到执行这样

grant dba to my_user; 

其中my_user查询的模式是,你从执行您的查询的用户。

如果你想阅读其他数据库中的数据不是要连接去,你可以使用这样的数据库链接做到这一点:

create database link "my_link" 
connect to "HR" identified by "hr" 
using '(DESCRIPTION = 
     (ADDRESS_LIST = 
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.200)(PORT = 1521)) 
     ) 
     (CONNECT_DATA = 
     (SID = ORACLE) 
     ) 
    )' 
/

其中主机为其他数据库安装和SID是服务器数据库的名称。

,然后执行查询是这样的:

select * from [email protected]_Link; 
0

创建公共同义词SYNONYM您的选择之前,反对

CREATE OR REPLACE PUBLIC SYNONYM suppliers 
FOR app.suppliers; 

是:

select * from app.suppliers; 

SYNONYM后:

select * from suppliers; 
相关问题