用户可以在自己的模式中创建同义词,这需要具有CREATE SYNONYM这个系统权限。如果希望在其他用户的模式中创建同义词,则需要具有CREATE ANY SYNONYM这个系统权限。普通用户创建的同义词一般都是私有同义词,公有同义词一般由DBA创建,普通用户如果希望创建同义词,则需要CREATE PUBLIC SYNONYM这个系统权限。
假设oracle有以下两个用户: admin , visitor 我们在admin下建立了 testtable 这个表,并且对visitor用户赋权 然后我们用visitor登陆 : 查询这个表的时候我们一定需要这样写 select * from admin.testtable 如果直接写 select * from testtable oracle会报错说表不存在 但是我们可以在visitor里建立[私有同义词] 让 testtable = admin.testtable 这样在visitor下就可以直接输入 select * from testtable进行查询 但是如果用户很多的情况下会觉得很麻烦,因为每个用户都需要加[私有同义词] testtable=admin.testtable 所以就出现了 [公有同义词] 直接在admin用户下建立公有同义词 testtable = testtable 这样做好后,所有的用户都可以直接使用 select * from testtable 进行访问而并不需要加前缀,也不用再加[私有同义词]了
创建私有同义词的命令是CREATE SYN
ONYM,它的语法规则为:
CREATE SYNONYM 同义词 FOR 用户名.对象名;
例如,假设当前用户为了方便地访问scott用户的表dept,可以执行下面的CREATE语句创建同义词:
CREATE SYNONYM sy_dept FOR scott.dept;
这样在具有相应权限的情况下,当前用户就可以通过这个同义词代替原来的表,在SQL语句中通过访问同义词来对原来的表进行操作。例如:
SELECT deptno,dname,loc FROM sy_dept;
创建公有同义词的命令也是CREATE SYNONYM,只是要使用PUBLIC关键字进行限定。创建公有同义词的命令格式为:
CREATE PUBLIC SYNONYM 同义词 FOR 用户名.对象名;
例如,为了让大家都能方便地访问scott用户的表dept,DBA可以通过执行下面的语句创建一个公共同义词:
CREATE PUBLIC SYNONYM pub_dept FOR scott.dept;
在具有相应权限的情况,任何用户都可以通过这个同义词访问SCOTT用户的表dept。
用户如果不使用同义词时,可以将其删除。删除同义词的命令是DROP SYNONYM。这条命令的语法格式为:
DROP SYNONYM 同义词;
一个用户可以删除自己创建的同义词,如果要删除其他用户创建的同义词,则要具有DROP ANY SYNONYM系统权限。DBA可以删除所有的公共同义词,普通用户需要具有DROP PUBLIC SYNONYM系统权限,才能删除公共同义词。同义词被删除以后,它的相关信息也将从数据字典中删除。