Oracle数据库对象_同义词
同义词是一种数据库对象,它是为一个数据库对象定义的别名,使用同义词的主要目的是为了简化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数据库对象,同义词、序列、视图、索引
数据库对象简介 Oracle 数据库对象又称模式对象 数据库对象是逻辑结构的集合,最基本的数据库对象是表 其他数据库对象包括: 同义词是现有对象的一个别名. 简化SQL语句 隐藏对象的名称和所有者 提 ...
- Oracle数据库对象_视图
视图是一种非常重要的数据库对象,它的形式类似于普通表,我们可以从视图中查询数据. 实际上它是建立在表上的一种虚表,在视图中并不存储真正的数据,而是仅仅保存一条SELECT语句,对视图的访问将被转化为对 ...
- Oracle数据库对象(表空间/同义词/序列/视图/索引)
数据库对象 Oracle数据库对象: 数据库对象是数据库的组成部分,常常用 CREATE 命令进行创建,可以使用 ALTER 命令修改,用 DROP 执行删除操作. 种类: (1)表空间:所有的数据对 ...
- Oracle 数据库对象
数据库对象是数据库的组成部分,常常用CREATE命令进行创建,可以使用ALTER命令修改,用DROP执行删除操作.前面已经接触过的数据库对象有表.用户等. 今天将学习更多的Oracle数据库对象: 同 ...
- oracle数据库链路和同义词
Oracle数据库链路的建立和使用 先来一个例子: --创建数据库链路create public database link xaffdblink connect to zdcl identi ...
- Oracle数据库对象题库
一. 填空题 在用 create 语句创建基本表时,最初只是一个空的框架,用户可以使用insert命令把数据插入表中. 在基本表不需要时,可以使用 drop table 语句撤消.在一个基本表撤 ...
- 数据库 Oracle数据库对象一
常见的数据库对象 表:基本的数据存储集合,由行和列组成 视图:从表中抽出的逻辑上相关的数据集合 序列:提供有规律的数值 索引:提高查询的效率 同义词:给对象起别名 create table语句 --c ...
- oracle数据库对象使用说明
1.创建一个分区表,并插入一些数据,同时查询出每个分区的数据. 答:创建分区表如下 2.创建一个视图,并给出一个查询语句. 3.在当前用户下创建一个同义词,用于查询scott用户下的dept表,并给出 ...
- 【Oracle】实现Oracle数据库对象的一键升级
引言 公司内部的项目比较倾向于将业务逻辑放在oracle存储过程中实现,所以每次项目升级都涉及到很多的oracle表,存储过程等数据库对象的升级.然而采取的升级方式是比较"原始&qu ...
随机推荐
- 标准SAP中的物料类型
DIEN -服务 ERSA -备件 FERT -成品 HALB -半成品 HAWA -贸易商品 HIBE -经营供应 LEER -虚拟件 NLAG -费存储物料 ROH -原材料 VERP -包装 W ...
- VK Cup 2012 Qualification Round 2 C. String Manipulation 1.0 字符串模拟
C. String Manipulation 1.0 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 codeforces.com/problemset/pr ...
- [Jobdu] 题目1497:面积最大的全1子矩阵
题目描述: 在一个M * N的矩阵中,所有的元素只有0和1,从这个矩阵中找出一个面积最大的全1子矩阵,所谓最大是指元素1的个数最多. 输入: 输入可能包含多个测试样例.对于每个测试案例,输入的第一行是 ...
- 基于私钥加密公钥解密的RSA算法C#实现
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...
- javascript------>delete
delete只能删除属性,不能删除变量 var a = "roboce"; delete a; // false a; b = "haha"; delete b ...
- JAVA设置SimpleDateFormat函数时区
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sdf.setTimeZone(TimeZo ...
- 标准库 - fmt/format.go 解读
// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a B ...
- C语言第六节基本运算符
算术运算 C语言一共有34种运算符,包括了常见的加减乘除运算 加法运算+ 除开能做加法运算,还能表示正号:+5.+90 减法运算- 除开能做减法运算,还能表示符号:-10.-29 乘法运算* 注意符号 ...
- Free download SKP900 update tool & activation tool
One of the SKP900 key programmer user failed to get the SKP900 upgraded and add free tokens online u ...
- PHP常用文件函数和目录函数整理
一.常用文件函数库 1.basename(); -- 返回路径中的文件名部分. string basename ( string $path [, string $suffix ] ) //给出一个包 ...