2013-06-26 46 views
0

使用SQL * Plus查询多个数据库的方式是什么?查询不止一个数据库?

在MySQL中有可能做这样的事情:

create table WK_LINK_JOINT_IDEOREQ AS 
select k.constraint_name cn, k.table_name tl, l.column_name lc 
    , k.referenced_table_name tg, k.column_name cg, l.referenced_table_name td 
    , l.referenced_column_name cd 
    from information_schema.KEY_COLUMN_USAGE k 

这只是一个例子,它没有完成:但你可以看到,我们是在两个数据库,INFORMATION_SCHEMA和另外一个工作。我想用SQL * Plus做这样的事情,但问题是当我们使用SQL * Plus连接时,我们指定数据库(SID),这意味着其他人无法访问。

有没有办法做到这一点?

+1

可以帮忙http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_5005.htm –

+0

Josef的建议是正确的 - 数据库链接是Oracle为跨数据库查询提供的机制。 – marceljg

回答

1

Oracle有a different interpretation of DATABASE from MySQL。在Oracle中,我们在同一个数据库中有多个用户或模式。

因此,如果您真正想要访问来自不同架构的对象,那么所有必须发生的事情都是为该架构授予您特权。然后你可以引用你的SQL中的表(或其他)。

用户Joe授予您选择他的桌子上

SQL> conn JOE/SOAP 
SQL> grant select on my_table to ABC; 

然后,您可以在其上运行查询:

SQL> conn ABC/DEF 
SQL> select * from joe.my_table; 

在您使用INFORMATION_SCHEMA你的榜样。 Oracle的等价物是数据字典,一个巨大的视图库。 Find out more.

默认情况下,大多数人都会授予公共访问权限。因此,您可以从USER_TABLES,USER_CONSTRAINTS和USER_CONS_COLUMNS中进行选择以重新创建该查询(假设我已正确理解)。