ocp之同义词

本文详细了介绍了同义词的概念:

转载之:http://database.51cto.com/art/201004/196062.htm

[@more@]

设定同义词,方便使用

SQL

select * from emp;等用于select * from abc;

建立共有的同义词

SQL

如果用户的等级不够建立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

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 scott.s;

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 scott.supplier;

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 同义词的名字;

转载之:http://wenku.baidu.com/view/474c47c66137ee06eff91846.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24111980/viewspace-1058194/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24111980/viewspace-1058194/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值