阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle数据库对象_同义词

120次阅读
没有评论

共计 2759 个字符,预计需要花费 7 分钟才能阅读完成。

同义词是一种 数据库对象 ,它是 为一个数据库对象定义的别名 ,使用同义词的主要目的是为了 简化 SQL 语句的书写

同义词的概念和类型

利用同义词可以为用户的一个对象,或者 其他用户 的一个对象定义别名,从而 简化命令或程序的书写 ,在命令或程序中可以 直接使用同义词代替原来的对象

可以为 表、视图、存储程序、序列等对象 建立同义词,也可以 为一个同义词再建立同义词 ,甚至可以为一个 不存在的对象建立同义词 ,系统仅仅在 使用同义词时才验证它所代表的对象是否存
同义词本身并不包含原对象中的数据或代码,它的作用仅仅相当于一个 指针

在使用同义词时,系统根据 同义词的定义查找它所指向的对象,将对同义词的访问转化为对原对象的访问
同义词的作用仅仅是为了方便用户操作数据库对象。

Oracle 支持两种类型的同义词,即 私有同义词 公共同义词

私有同义词由普通用户创建,在默认情况下只能由用户本人使用。
公有同义词一般由 DBA 创建,可以由所有用户使用。

公共同义词的意义在于它代表了一个大家都可以访问的对象。

注:普通用户如果要访问公有同义词,需要具有对同义词所指向的原对象的访问权限。

一般来说,在具有相关数据库对象的权限后,即可进行相关的操作,但如果定义了同义词,就可以简化 SQL 语句的书写。

比如在访问其他用户模式下的数据库对象时,便可以省略对象前的模式名称。

用户可以随意为其他用户的一个对象创建一个同义词,但这并不意味着这个用户就具有了访问其他用户的对象的权限。

因为正如前面所提到的,只有在使用同义词时,系统才验证用户是否有相应的访问权限。

例如:

create synonym emp for scott.emp;

select * from emp;

注:以普通用户身份在 scott 用户模式下为数据库对象 emp 创建同义词 emp。

在没有访问权限的情况下,提示错误:ORA-00942: 表或视图不存在。

在考虑另一种情况,就是为不存在的对象创建同义词:

create synonym em for scott.em;

select * from em;

在使用同义词 em 访问源对象时,提示错误:ORA-00980: 同义词转换不再有效。

同义词的创建和删除

用户可以在自己的模式中创建同义词,这时需要具有 CREATE SYNONYM 这个系统权限。
如果希望在其他用户的模式中创建同义词,则需要具有 CREATE ANY SYNONYM 这个系统权限。

普通用户如果希望创建公有同义词,需要具有 CREATE PUBLIC SYNONYM 系统权限。

创建私有同义词的命令是 CREATE SYNONYM,它的语法规则为:

CREATE SYNONYM 同义词 FOR 用户名. 对象名;

创建公有同义词的语法格式为:

CREATE SYNONYM 同义词 FOR 用户名. 对象名;

注:这里的用户名. 对象名是指其他用户模式,因为一般在创建同义词时,是为了方便访问其他用户模式下的对象。

当然也可以在自己模式下创建同义词,对于普通用户而言,如果是创建私有同义词是没有什么意义的。

对于公有同义词而言,普通用户和 DBA 权限用户都可以在自己用户模式下,创建公有同义词,这样可以方便其他用户对该数据库对象的访问。

比如 DBA 权限用户创建 v$ 开头的有关动态性能视图的公有同义词。

用户如果不使用同义词时,可以将其删除。

删除同义词的命令是 DROP SYNONYM,这条命令的语法格式为:
DROP SYNONYM 同义词名;

注:如果要删除公有同义词的话,要在关键字 SYNONYM 之前加上关键字 PUBLIC。

一个用户可以删除自己创建的同义词,如果要删除其他用户创建的同义词,则要具有 DROP ANY SYNONYM 系统权限。
DBA 可以删除所有的公共同义词,普通用户需要具有 DROP PUBLIC SYNONYM 系统权限,才能删除公共同义词
同义词被删除以后,它的相关信息也将从数据字典中删除。

注:对于普通用户而言,即使是自己创建的公有同义词,仍需要具有 DROP PUBLIC SYNONYM 系统权限,才能删除自己创建的同义词。

 

同义词信息的查询

同义词作为一种数据库对象,它的相关信息被存储在数据字典中。

与同义词有关的数据字典有三个:user_synonyms、all_synonyms、dba_synonyms。

其中在数据字典 user_synonyms 中记录了当前用户所拥有的同义词。这个表的各列定义及其意义如下所示:

SYNONYM_NAME 同义词名称

TABLE_OWNER 所指向的对象属主

TABLE_NAME 所指向对象的名称

DB_LINK 数据库链接

注:DB_LINK 列是指在创建同义词 SYNONYM 时,TABLE_NAME 是通过 DBLINK 获得的。

如果要查询当前用户创建了哪些同义词,它们各代表哪个用户的哪个对象,可以执行下面的 SELECT 语句进行查询:
SELECT synonym_name, table_owner, table_name FROM user_synonyms;

在数据字典 all_synonyms 中记录了当前用户所能使用的所有同义词,包括私有同义词和公共同义词。
在数据字典 dba_synonyms 中记录了数据库中所有的同义词,包括每个用户创建的私有同义词和 DBA 创建的公共同义词。
这个视图只有 DBA 能够访问,它的结构除了包含数据字典 user synonyms 的所有列外,还有一个列 owner 代表同义词的创建者
如果要在整个数据库范围内查询某个同义词的信息,可以对数据字典 dba_synonyms 进行查询。
例如,要查询用户 scott 所创建的所有同义词,可以执行下面的 SELECT 语句:

SELECT synonym_name, table_owner, table_name FROM dba_synonyms WHERE owner=’SCOTT’;

如果要查询用户 scott 的表 dept 具有哪些同义词,可以执行下面的 SELECT 语句:

SELECT synonym_name, table_owner FROM dba_synonyms WHERE owner=’SCOTT’ AND table_name=’EMP’;

如果要查询系统中所有的公共同义词,可以执行下面的 SELECT 语句:

SELECT synonym_name, table_owner FROM dba_synonyms WHERE owner=’PUBLIC’;

注:table_owner 和 owner 之前的区别:

table_owner 是指同义词所指向数据库对象的属主,一般就是指该对象的创建者,而 owner 是指同义词的创建者。

更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-05/131394.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2759字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中