我正在使用Oracle 11G。如何在像select * from dbname.schemaname.table
这样的查询中提供dbname和模式名称。我想知道语法。如何从正确的数据库和模式中选择?
如果我写的查询select * from employees
,我得到的错误
表或视图不存在
我相信我有有的名称为dbname.schemaname.tablename
,但我不知道语法。有人可以帮忙吗?
我正在使用Oracle 11G。如何在像select * from dbname.schemaname.table
这样的查询中提供dbname和模式名称。我想知道语法。如何从正确的数据库和模式中选择?
如果我写的查询select * from employees
,我得到的错误
表或视图不存在
我相信我有有的名称为dbname.schemaname.tablename
,但我不知道语法。有人可以帮忙吗?
首先,如果你想从另一个架构查询,你可以做这样的:
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;
创建公共同义词SYNONYM您的选择之前,反对
CREATE OR REPLACE PUBLIC SYNONYM suppliers
FOR app.suppliers;
是:
select * from app.suppliers;
SYNONYM后:
select * from suppliers;
为什么在连接字符串中没有提供DBname?只有在引用不同于登录用户的架构时才需要架构。数据库链接可以使用@ so来引用。'schema.table @ link'从ALL_DB_LINKS中选择*将显示登录用户可访问的链接。也许DBLink是你之后的东西? – xQbert
你确定桌子是否存在?该表是一个可能在缺省HR模式下的表,*如果它已经安装了*,那么如果你没有以HR登录,你可以从hr.employees中选择*但只有当它存在于那里,有正确的权限来查看它。为什么你认为你需要'dbname',是基于不同的数据库平台? –