工作中很多时候都会遇到需要将两个不同的表空间甚至数据库的表进行联合查询或者建立视图的情况。
不同的表空间查询我们可以通过在将要查询的表前面加上 表空间的对应的用户名来实现,如有两个表空间分别对应两个用户,一个是sa一个是ckq:
create or replace view saAndckqUsers as
select * from sa.users
union
select * from ckq.users;
当然,这需要有足够的权限。
那么oracle数据库中如何实现不同的数据库之间的视图建立呢?
建设我们要在数据库A中查询数据库B的表。
首先,需要建立一个 database link。关于databaselink的详细信息可以参见http://moonights.iteye.com/blog/568895
create public database link wen_BJ connect to wenName identified by wenPassword using '(DESCRIPTION =
(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)'
其中:wen_BJ 是 database link 的名字,wenName是 要连接查询的数据库 B 提供的 用户名,wenPassword 是用户密码。using后面的字符串则是 数据库B在数据库A中建立的连接串内容。在network\admin目录下tnsnames.ora文件中。
这样我们就建成一个 名叫 wen_BJ的 database link 了。如要删除,可用
drop public database link wen_bj;
建好 database link 后,查询就简单了:
只需要在登录 数据库a之后,使用如下的sql语句即可
select * from BJ@wen_BJ;
这样就实现了 在数据库 a中查询数据库 表中表的目的。