设定同义词,方便使用select * from emp;等用于select * from abc;建立共有的同义词如果用户的等级不够建立public同义词,可以在
设定同义词,方便使用
select * from emp;等用于select * from abc;
建立共有的同义词
如果用户的等级不够建立public同义词,可以在system下授权:
grant create any synonym to scott;
grant create public synonym to scott;
取消授权:
revoke create any synoym from scott;
revoke create public synoym from scott;
取消同义词:
drop public synonym abc;
授权取消同义词:
grant dorp public synonym to scott;
取消授权:
revoke drop public synonym to scott;
15.9 引入同义词(synonym)的原因
在一些商业数据库中,有时信息系统的设计或开发者为了增加易读性,故意定义一些很长的表名(也可能是其它的对象)。这样虽然增加了易读性,但在引用这些表 或对象时就不那么方便,也容易产生输入错误。另外在实际的商业公司里,一些用户觉得某一个对象名有意义也很好记,但另一些用户可能觉得另一个名字更有意 义。
oracle系统提供的同义词(synonym)就是用来解决以上的难题的。设想一下在您的日常工作中您每天都要使用supplier表许多次,而且您的英文打字的水平并不高。在这种情形下,您就可以借助于同义词(synonym)来帮助您提高生产力。
15.10 怎样创建同义词(synonym)
现在您就可以使用如下的create synonym语句(例15-38)为表supplier建了一个同义词(别名)s。
例15-38
sql> create synonym s
2 for supplier;
例15-38结果
同义词已创建。
现在您就可以把同义词(别名)s当成supplier来使用。您可以使用如下的查寻语句(例15-39)来验证这一点。
例15-39
sql> select *
2 from s;
例15-39结果
s_code sname contact phone fax
---------- ------------------------- --------------- --------------- -------
2000 仙客来百货 张根发 4444944 4444844
2010 心太软小商品 石铁心 1741741 1741742
2021 食为天餐具 金元宝 1671671 1671674
2032 食为先餐具 陆合彩 1681684 1681684
那您可能会问,您怎样才能知道您到底拥有哪些同义词(synonym)呢?
还记得数据字典user_objects吗?既然同义词(synonym)是对象,,它们在这个数据字典中就一定有记载。因此您可以使用如下的查寻语句(例 15-41)从数据字典user_objects中得到您所拥有的全部同义词(synonym)的信息。当然为了使sql*plus的显示输出更加清晰您 应该先使用如下的sql*plus格式化命令(例15-40)。
例15-40
sql> col object_name for a20
例15-41
sql> select object_name, object_type, created, status
2 from user_objects
3 where object_type like 'syn%';
例15-41结果
object_name object_type created status
-------------------- ------------------ ---------- ------
s synonym 28-4月 -03 valid
例15-41显示的结果表明:在您的模式(用户)下只有一个同义词(synonym),那就是您刚刚建立的同义词(synonym)s。
但是例15-41显示的结果并没有告诉您这个同义词(synonym)到底是基于那个表的及表的主人是谁。如果您有一个这样同义词(synonym)时, 这方面的信息也许就显得特别重要了。您可以使用如下的查寻语句(例15-43)从数据字典user_synonyms中得到这方面的信息。当然为了使 sql*plus的显示输出更加清晰您应该先使用如下的sql*plus格式化命令(例15-42)。
例15-42
sql> col table_owner for a12
sql> col table_name for a12
例15-43
sql> select synonym_name, table_owner, table_name
2 from user_synonyms;
例15-43结果
synonym_name table_owner table_name
------------------------------ ------------ ----------
s scott supplier
例15-43显示的结果表明:在您的模式(用户)下只有一个同义词(synonym),那就是您刚刚建立的同义词(synonym)s。该同义词(synonym)是基于表supplier,而这个表的主人是scott。
创建同义词(synonym)的语句格式如下:
create [public] synonym 同义词的名字
for 对象名;
其中:
public: 系统中所有的用户都可以访问所创建的同义词
同义词的名字: 所创建的同义词的名字
对象名: 创建的同义词所基于的对象名
在创建同义词时要注意的事项:
所基于的对象不能包含在任何软件包中
一个私有的同义词不能与任何该用户下的其它对象重名
您刚刚创建的同义词(synonym)s是一个私有的同义词,即只能在您的用户(scott)下直接引用,如果其它用户引用它就必需冠以用户名.(既 scott.s的方式引用)。这样作很不方便。如果您所建的表supplier是一个所有用户共享并经常使用的表,您应该怎样处理这一问题呢?
15.11 创建公用同义词(synonym)
您可以为supplier表创建一个公用同义词(synonym)。为了演示方便,您应该从当前的scott用户切换到另一个用户下,如system。您可以使用如下的sql*plus命令(例15-44)来完成用户的切换。
例15-44
sql> connect system/manager

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号