oracle同义词 转
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,但给表取别名是不能加的.