Oracle 同义词详解(synonym)

文章目录

1 概述

在这里插入图片描述

2 语法

2.1 授权

1. 相关权限语句
   create synonym		 :创建私有同义词权限
   create public synonym :创建公有同义词权限
   create any synonym    :上述都有
   drop any synonym
   drop public synonym
   -- 亦可通过下列查询语句知晓
   select distinct t.privilege
     from dba_sys_privs t
    where t.privilege like '%SYNONYM%'
    order by t.privilege;
2. 授权&回收
   grant create any synonym to scott; -- 授权
   revoke create any synonym to scott; -- 回收
3. 查询同义词对象
   select * from dba_synonyms; -- 仅 DBA 用户
   select * from all_synonyms;
   select * from user_synonyms;

 
 

2.2 创建同义词

create [public] synonym <synonym_name> for [schema.] object[@db_link];
-- 示例
create public synonym jobs for hr.jobs;
-- 用 scott 用户访问
select * from jobs;
-- 删除
drop synonym jobs;
-- 说明
当原对象被删除时,同义词依旧保留
但又存在原对象时,同义词依旧可以使用

 
 

扩展:Oracle 12c 官方文档 - 创建同义词语句

3 扩展

3.1 优先级

思考:当 '私有同义词''公有同义词''当前模式(用户)下的对象' "同名" 时,
     访问的是谁呢?
结论:'当前模式(用户)下的对象' > '私有同义词'
     '当前模式(用户)下的对象' > '公有同义词'
     -- 优先级从大到小
说明:(1) 了解即可,实际开发中,建议只创建 '公有同义词'
     (2) '私有同义词''公有同义词' 无法 "同名",否则报错
         -- 虽然可以以 '属主.同义词名' 区分 私有同义词,
         -- 但是个人感觉,多此一举

 
 

验证思路:

用户       表					操作   
hr	      test_synonym_hr       创建私有同义词 test_synonym
scott     test_synonym_scott    创建公有同义词 test_synonym
system    test_synonym          查询 test_synonym,验证结果

 
 

数据准备:

-- system 用户执行下列语句
create table hr.test_synonym_hr (
  sname varchar2(30)
);
create table scott.test_synonym_scott (
  sname varchar2(30)
);
create table test_synonym (
  sname varchar2(30)
);
-- 插入测试语句
insert into hr.test_synonym_hr(sname) values('hr');
insert into scott.test_synonym_scott(sname) values('scott');
insert into test_synonym(sname) values('system'); 
commit;
-- 创建同义词
-- create synonym hr.test_synonym for hr.test_synonym_hr;
-- create public synonym test_synonym for scott.test_synonym_scott;

 
 

验证测试:查询结果都是 system:即 "当前模式(用户)下的对象"

-- system 用户下
select * from test_synonym; -- system
-- 私有同义词
create synonym test_synonym for test_synonym_hr;
select * from test_synonym; -- system
-- 公有同义词
drop synonym test_synonym; -- 删除 '私有同义词',避免 同名导致报错
create public synonym test_synonym for scott.test_synonym_scott;
select * from test_synonym; -- system

 
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值