前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试514】在Oracle中,同义词的定义及其作用是什么?有关同义词需要注意些什么?

【DB笔试面试514】在Oracle中,同义词的定义及其作用是什么?有关同义词需要注意些什么?

作者头像
AiDBA宝典
发布2019-09-29 15:00:57
8280
发布2019-09-29 15:00:57
举报
文章被收录于专栏:小麦苗的DB宝专栏

题目部分

在Oracle中,同义词的定义及其作用是什么?有关同义词需要注意些什么?

答案部分

同义词是其它对象(例如表、实体、存储过程、函数、包、序列)的别名。同义词也可以是另一个同义词的别名。同义词的优点主要体现在以下几个方面:

l 当使用对象时,不需要指出对象的所有者。

l 引用对象不需要指出它所在的数据库。

创建同义词必须要有 CREATE ANY SYNONYM、CREATE SYNONYM 系统权限。要创建全局的同义词,必须有CREATE PUBLIC SYNONYN 系统权限。创建同义词的语法如下所示:

CREATE OR REPLACE [PUBLIC ] SYNONYM 同义词名称 FOR 用户名.表名称;

以下示例的作用是将EMP定义为SCOTT.EMP的同义词。

代码语言:javascript
复制
SYS@lhrdb> SELECT COUNT(1) FROM EMP;
SELECT COUNT(1) FROM EMP
                     *
ERROR at line 1:
ORA-00942: table or view does not exist
SYS@lhrdb> CREATE SYNONYM EMP FOR SCOTT.EMP;
Synonym created.
SYS@lhrdb> SELECT COUNT(1) FROM EMP;
  COUNT(1)
----------
        14

有关同义词需要注意的几点如下所示:

① 公共同义词与私有同义词可以同名。如果存在公共同义词和私有同义词同名的情况,那么在访问同义词时,访问的是私有同义词所指向的对象。

② 不能创建和当前用户下的表名相同的私有同义词,但是可以创建和当前用户下的表名相同的公共同义词。

测试如下:

代码语言:javascript
复制
LHR@ora11g >  create table s_b as select * from dual;
Table created.
LHR@ora11g > create synonym s_b for s_b;
create synonym s_b for s_b
*
ERROR at line 1:
ORA-01471: cannot create a synonym with same name as object
LHR@ora11g > create public synonym s_b for s_b;
Synonym created.

③ 不能访问与当前用户下的表名相同的公共同义词。Oracle选择访问对象的顺序原则是先SCHEMA后PUBLIC。通过访问同义词就相当于访问其他SCHEMA对象的表,但是,当创建的同义词和其他对象重名的时候,有可能在查询时却指向了另一个同名的对象,导致无法访问到正确的数据。

测试如下:

代码语言:javascript
复制
LHR@ora11g >  create table s_a (name varchar2(10));
Table created.
LHR@ora11g >  create table s_b as select * from dual;
Table created.
LHR@ora11g > create public synonym s_a for s_b;
Synonym created.
LHR@ora11g > select * from s_a;
no rows selected
LHR@ora11g > set line 9999
LHR@ora11g > col OBJECT_NAME format a10
LHR@ora11g >  select owner,object_name,object_type FROM dba_objects where object_name='S_A';
OWNER                          OBJECT_NAM OBJECT_TYPE
------------------------------ ---------- -------------------
PUBLIC S_A        SYNONYM
LHR                            S_A        TABLE
LHR@ora11g > 
LHR@ora11g > create synonym s_b for s_b;
create synonym s_b for s_b
*
ERROR at line 1:
ORA-01471: cannot create a synonym with same name as object
LHR@ora11g > create public synonym s_b for s_b;
Synonym created.

以上实验也证明了,Oracle选择访问对象的顺序原则是先SCHEMA后PUBLIC。

& 说明:

有关Oracle同义词的更多内容介绍可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2154285/

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档