1.什么是同义词?
就是给数据库方案起一个别名
为什么要起别名?用本身名字不好吗?
比如说最近大家很喜欢的演员迪丽热巴,人家全名叫迪丽热巴·迪力木拉提 ,长不长,叫起来累不累,所以起了个小名叫胖迪,简不简单,好不好记,叫起来也容易吧,所以同义词就是这个意思,同义词的存在就是为了使用方便,简化操作,不用打那么长的原名,可以用简短的小名
2.怎么建同义词?
(1)首先要看你目前登陆的用户有没有建同义词的权限,
查看方法:登陆sys,然后select * from session_privs;
但是出来的结果我并不能看懂,尴尬,所以直接创建同义词,如果报没有权限的错,就再授权,简单直接,我喜欢
(2)授予当前用户创建同义词的权限,以scott为例,先登陆system,再授权,scott不能授权给自己
授权语句:
grant create any synonym to scott;
grant create public synonym to scott;
取消授权语句:
revoke create any synoym from scott;
revoke create public synoym from scott;
创建私有同义词语句:
create synonym 别名 for scott.表名;或者create synonym 同义词 for 表名,因为登陆了scott,所以不说也
例如我scott下有一个表叫queshengzhi,现在起一个同义词q,语句就是:create synonym q for scott.queshengzhi;
再查询queshengzhi这个表的内容时就可以用这样的查询语句:select * from q;或者是select * from queshengzhi;这两种查询方法是一样的
这个别名只有scott自己可以用,别人想用必须scott.q才行,也就是说别人想用这个私有同义词需要scott.同义词
删除私有同义词:
drop synonym 同义词
例如 drop synonym q;
创建共有同义词:
create public synonym 同义词 for user.表名
例如create public sysnonym que for scott.queshengzhi;
这样有查找scott下的表的权利的用户就可以用这个同义词了,并且不用scott.同义词,直接select * from que;就可以
删除共有同义词:
drop public synonym 同义词;
例如 drop publicsynonym que;
3.同义词转换不再有效怎么办
可以检查创建时的语句是否有问题
可以检查登陆的用户是否能看到你创建同义词的用户的表