Oralce中的synonym同义词

发布 2020-01-03 01:58:28 阅读 8957

设定同义词,方便使用。

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)下直接引用,如果其它用户引用它就必需冠以用户名。(既 的方式引用)。这样作很不方便。

如果您所建的表supplier是一个所有用户共享并经常使用的表,您应该怎样处理这一问题呢?

15.11 创建公用同义词(synonym)

您可以为supplier表创建一个公用同义词(synonym)。为了演示方便,您应该从当前的scott用户切换到另一个用户下,如system。您可以使用如下的sql*plus命令(例15-44)来完成用户的切换。

例15-44

sql> connect system/manager

例15-44结果。

已连接。 现在您如果使用如下的查寻语句(例15-45),您是不会得到您想要的信息的。

例15-45

sql> select *

2 from s;

例15-45结果。

from s

error 位于第 2 行:

ora-00942: 表或视图不存在。

您如果再使用如下的查寻语句(例15-46),您也同样不会得到您想要的信息的。

例15-46

sql> select *

2 from supplier;

例15-46结果。

from supplier

error 位于第 2 行:

ora-00942: 表或视图不存在。

如果您在同义词(synonym)s之前冠以用户名。(scott.),您就可以得到您所需要的信息了。如下面的查寻语句(例15-47)。

例15-47

sql> select *

2 from

例15-47结果。

s_code sname contact phone fax

2000 仙客来百货张根发 4444944 4444844

2010 心太软小商品石铁心 1741741 1741742

2021 食为天餐具金元宝 1671671 1671674

2032 食为先餐具陆合彩 1681684 1681684

由于其它用户在引用这一同义词(synonym)s时必须冠以您的用户名(.)这样很不方便,而且也容易产生输入错误,所以您可以使用如下的ddl语句(例15-48)为scott用户下的supplier建立一个公用的同义词(synonym)ss。

例15-48

sql> create public synonym ss

2 for

例15-48结果。

同义词已创建。

现在您就可以利用您刚刚创建的公用的同义词(synonym)ss来获得您所希望得到的信息。您可以使用如下的查寻语句(例15-49)。

例15-49

sql> select *

2 from ss;

例15-49结果。

s_code sname contact phone fax

2000 仙客来百货张根发 4444944 4444844

2010 心太软小商品石铁心 1741741 1741742

2021 食为天餐具金元宝 1671671 1671674

2032 食为先餐具陆合彩 1681684 1681684

您也可能会问,其它用户是否也可以使用同样的方法访问同义词(synonym)ss。答案是肯定的。如果您还有疑问的话,您可以试着以如下的sql*plus命令(例15-50)以sys用户登录进入oracle数据库。

例15-50

sql> connect sys/oracle as sysdba;

例15-50结果。

已连接。 现在您就可以利用公共同义词(synonym)ss来获得您所希望得到的信息。您可以使用如下的查寻语句(例15-51)。

例15-51

sql> select *

2 from ss;

例15-51结果。

s_code sname contact phone fax

2000 仙客来百货张根发 4444944 4444844

2010 心太软小商品石铁心 1741741 1741742

2021 食为天餐具金元宝 1671671 1671674

2032 食为先餐具陆合彩 1681684 1681684

oracle并没有提供修改同义词(synonym)的命令。如果您要修改某一同义词(synonym)的话,您要先把它删除掉,之后再重新建立这个同义词(synonym)。

15.12 删除同义词(synonym)

如果经过了一段时间,您发现同义词(synonym)s已经没什么用处了,您就可以使用如下的ddl语句(例15-53)将它删除掉。不过在这之前您可能得先使用如下的sql*plus命令(例15-52)重新注册到scott用户下。

例15-52

sql> connect scott/tiger

例15-52结果。

已连接。 例15-53

sql> drop synonym s;

例15-53结果。

同义词已丢弃。

虽然例15-53结果已经显示:“同义词已丢弃。”,但是为了谨慎起见,您还是应该使用如下的查寻语句(例15-54)查看一下数据字典user_objects。

例15-54

sql> select object_name, object_type, created, status

2 from user_objects

3 where object_type like 'syn%';

例15-54结果。

未选定行 或者您应该使用如下的查寻语句(例15-55)查看一下数据字典user_ synonyms。

例15-55

sql> select synonym_name, table_owner, table_name

2 from user_synonyms;

例15-55结果。

未选定行 例15-54和例15-55显示的结果进一步证实了您已经将同义词(synonym)s成功地从系统中删除掉。

删除同义词(synonym)语句的格式如下:

drop synonym 同义词的名字;

如何删除中批注中的批注

word文本加批注时本是带的文件名称如何删除?众所周知插入批注的方法如下。选择word菜单 插入 批注 这样word文档右边就会出现一批注。遗憾的是。批注里面总是伴随着 批注 二字。能不能。只显示自己写的东西。而不显示 批注 二字呢。答案。删除批注你想让文档的读者看到的是文档的最终状态,而不是充满了...

记忆中的故乡作文我记忆中的故乡

记忆中的故乡作文我记忆中的故乡范文。我记忆中的故乡。光阴似箭,日月如梭,如今想想美丽的家乡,我还有点似在画中游的感觉,那里一年四季的美景以及淳朴的乡音乡俗时常在梦中与我不期而遇,让我久久难以忘怀。我的家乡位于一个小山村,市区驱车约一小时到达,古典庄重的佛家宝峰寺 波光粼粼的秀美宝峰湖 面容慈祥的爷爷...

生活中的爱作文生活中的爱作文

生活中处处充满爱,有父母的爱,老师的爱还有同学人的爱,甚至是陌生人的爱。在一个风和日丽的早晨,我背着书包蹦蹦跳跳地来到花香弥漫的校园。第二节课是语文课,我们要抄写词语。写着写着,写在本子上的墨水变淡了,起初,我并不在意,没过多久,就写不显了。我焦急万分,没多想,就用手轻轻拍了前排同学的肩,她和气地问...