创建同义词对于我的项目来说, 主要是为了 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://www.f2er.com/oracle/209597.html