码迷,mamicode.com
首页 > 数据库 > 详细

oracle同义词 转

时间:2016-02-15 18:11:20      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

1.为啥要用同义词:

同义词,顾名思义就是两个词的意思一样,可以互相替换.那它的作用有哪些呢:

a一个最明显的目的就是简化sql.如果某个数据库对象的名字太长了,可以创建一个短一点的同义词.就相当于是缩写呗.

b.另外一个目的是隐藏一些对象的信息.比如查找另一个 schema中的某个表,需要在表名前加schema名做为前缀.如果创建一个同义词就可以隐藏schema信息.

2.怎么创建同义词.

语法:CREATE [OR REPLACE] [PUBLIC] SYNONYM synonym_name FOR [schema.]object

1.创建私有同义词:

例如:CREATE SYNONYM arwen FOR table_of_arwen

这样使用select * from arwen或select * from table_of_arwen是一样的.

删除同义词:DROP SYNOYM arwen.

注意:私有同义词只有创建它的用户自己可以用.如果其他schema要用必须得加创建者schema为前缀.这和其他对象是一样的.

2.创建公共同义词:

CREATE PUBLIC SYNONYM arwen FOR table_of_arwen

所有的schema都能使用公共同义词.比如schema scott访问schema arwen的表table_of_arwen就可以用select * from arwen

有些人可能会奇怪这种情况为啥就不用到schema做前缀了.可能系统默认加了吧.

所以CREATE PUBLIC SYNONYM arwen FOR table_of_arwen或CREATE PUBLIC SYNONYM arwen FOR arwen.table_of_arwen是等效的.

其他schema都能用arwen去查找.

注意:如果其他schema没有权限查找表table_of_arwen则 也不能使用它的同义词去查找的.

3.关于错误:同义词转换不再有效.

当创建同义词时不会检查同义词代表的对象是否存在,都会成功创建.比如CREATE PUBLIC SYNONYM arwen FOR no_table_exist

假如不存在一个表叫no_table_exist或者其他数据库对象叫这名.

则SELECT * FROM arwen时就会有错误提示:同义词转换不再有效.当然如果本来有那表后面删除了也会有同样的错误.

3.和同义词类似的别名

oracle里面还有个概念叫别名.它和同义词功能类似.只不过使用范围很小.主要用在一个sql语句中,只能临时起作用.像临时变量一样.

例如:

SELECT emp.ename,bonus.sal FROM emp ,bonus  where emp.ename = bonus.ename

我们可以给emp取一个别名e,bonus取b列也取别名则查询语句如下

SELECT e.ename AS myname,b.sal AS mysal FROM emp  e,bonus  b WHERE e.ename = b.ename

里面的关键字AS是可选的,如果去掉也会实现同样的功能.在列中可用AS,但给表取别名是不能加的.

oracle同义词 转

标签:

原文地址:http://www.cnblogs.com/janeaiai/p/5190914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!