oracle 创建同义词

创建同义词对于我的项目来说, 主要是为了 jdbc 写SQL的时候, 不需要在 表的前面加上 用户名称。 因为 SQL已经写好了,改起来麻烦,开发起来也麻烦。 即, A 用户要访问B 用户的表,不用加上 b.xxx 的表名。 可是百度了一通, 说得 看起来乱乱的, 对于菜鸟来说, 看起来懵了,还有什么鬼视图的。。看不懂。 只好自己尝试了。 比如 ehr 用户要访问 bms 用户下的表 CPCUSER 如果不使用同义词 即要使用 :

SELECT * FROM bms.CPCUSER WHERE username='xx'

怎么 创建同义词呢, 是在 ehr 用户 下面 创建 同义词的, 即 首先 ehr 用户要有 查询 bms 用户的表的权限,也要有 创建 同义词的权限。、 如果没有请给他创建权限。 或者使用 sys 更高一级的用户去创建同义词, 如果不行,就创建 公用的 public 的同义词。 由于我的 ehr 是有 dba的权限的, 所以我就 在 ehr 下创建同义词了,因为 就是 bms有 dba的权限,创建同义词并没有效果,也许我创建的并不是 public 的同义词吧 使用 ehr 用户 登录 ,执行 下面的创建同义词的语句:

create synonym CPCORG for bms.CPCORG ;

这时候可以在 使用ehr 用户下执行下面的SQL 查询了,不用加上 用户的名称了:

SELECT * FROM CPCORG  WHERE  ORGNAME='电热公司'
	

如果比较多表怎么办呢? 比如:

select 'CREATE SYNONYM '||table_name||'  FOR BMS.'||table_name ||';' from ALL_TABLES where owner = 'BMS' 
	AND table_name NOT LIKE 'TMP%'
  

将查询出来的 结果复制 再 批量执行创建同义词 即可。 相同的方法,也是可以 批量 将 对应表给 ehr 用户 授权查询 等权限的

当前 如果当前 的用户没有创建或删除 同义词的权限怎么办? 使用 dab 或者 sys 权限的 账户登录 执行 下面的 同义词 语句即可

DROP SYNONYM EHR.CPCORG; -- 删除EHR 用户的 同义词
		
                --为 ehr用户 创建 bms表cpcorg的同义词 
		create synonym EHR.CPCORG for bms.CPCORG ; 

转载于:https://my.oschina.net/ouminzy/blog/882461

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值