Oracle跨用户,跨库关联查询处理

Oracle跨用户,跨库关联查询处理

一般来说,Oracle的跨用户关联查询可以使用给当前用户授权目标用户访问权限,然后使用目标用户.表名的形式访问。跨库关联查询可以建dblink然后使用远程表@dblink的形式访问。

但直接这么做会有一些问题,比如实际项目中需要改用户名,那所有使用用户名.表名的地方都要改。
还有虽然预期这两个用户是在同一个实例下,但实际项目中也有可能是在不同的实例下,这时候又得改dblink。

而直接使用dblink的也会有类似的问题,要求改dblink名的…这个可能性比较小,但原来预期得使用dblink的,实际项目却发现是在同一实例下,这时候使用dblink就有点低效了,能不用dblink的话,尽量不要用dblink.

理想的做法是,先建立视图或者同义词,在视图或者同义词中使用用户名.表名或者dblink,这样改名或切换的时候,只要改视图或同义词的定义语句就可以了,而不需要动代码.
以下是dblink,同义词,视图的创建脚本:

-- 如果创建全局 dblink,必须使用 systm 或 sys 用户,在 database 前加 public。  
create /* public */ database link dblink1  
  connect to dbusername identified by dbpassword  
using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))';  
--删除dblink
DROP /* public */  DATABASE LINK dblink1;
-- 查询现有DBLINK
select * from ALL_DB_LINKS;

--创建同义词
create or replace synonym 同义词名 for 表名;  
create or replace synonym 同义词名 for 用户.表名;  
create or replace synonym 同义词名 for 表名@数据库链接名; 
--删除同义词
drop synonym 同义词名;
--查询现有同义词
select * from user_synonyms;

--创建视图
create or replace view 视图名 as (select 字段 from 表名);  
create or replace view 视图名 as (select 字段 from 用户.表名);  
create or replace view 视图名 as (select 字段 from 表名@数据库链接名);
--删除视图
drop view 视图名;  
--查询现有视图
select * from user_views;
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值