当前位置:
文档之家› SQL语句中create的使用 (synonym同义词)
SQL语句中create的使用 (synonym同义词)
S SCOTT SUPPLIER
显示的结果表明:在您的模式(用户)下只有一个同义词(Synonym),那就是您刚刚建立的同义词(Synonym)s。该同义词(Synonym)是基于表supplier,而这个表的主人是SCOTT。
创建同义词(Synonym)的语句格式如下:
CREATE [PUBLIC] SYNONYM同义词的名字
删除同义词(Synonym)
如果经过了一段时间,您发现同义词(Synonym)s已经没什么用处了,您就可以使用如下的DDL语句将它删除掉。不过在这之前您可能得先使用如下的SQL*PLUS命令重新注册到SCOTT用户下。
SQL> CONNECT SCOTT/TIGER
已连接。
SQL> DROP SYNONYM s;
---------- ------------------------- --------------- --------------- -------
2000仙客来百货张根发4444944 4444844
2010心太软小商品石铁心1741741 1741742
2021食为天餐具金元宝1671671 1671674
DROP SYNONYM同义词的名字;
现在您如果使用如下的查寻语句,您是不会得到您想要的信息的。
SQL> SELECT *FROM s;
结果
FROM s
*
ERROR位于第2行:
ORA-00942:表或视图不存在
您如果再使用如下的查寻语句,您也同样不会得到您想要的信息的。
SQL> SELECT *FROM supplier;
结果
FROM supplier
已连接。
现在您就可以利用公共同义词(Synonym)ss来获得您所希望得到的信息。您可以使用如下的查寻语句
SQL> SELECT *FROMss;
S_CODE SNAME CONTACT PHONE FAX
---------- ------------------------- --------------- --------------- -------
SQL> CREATE SYNONYM sFOR supplier;
同义词已创建。
现在您就可以把同义词(别名)s当成supplier来使用。您可以使用如下的查寻语句来验证这一点。
SQL> SELECT * FROM s;
S_CODE SNAME CONTACT PHONE FAX
---------- ------------------------- --------------- --------------- -------
未选定行
或者您应该使用如下的查寻语句查看一下数据字典user_ synonyms。
SQL> SELECTsynonym_name,table_owner,table_nameFROMuser_synonyms;
未选定行
显示的结果进一步证实了您已经将同义词(Synonym)s成功地从系统中删除掉。
删除同义词(Synonym)语句的格式如下:
SQL语句中create的使用(synonym同义词)
select * fromemp;等用于select * fromabc;
建立共有的同义词
如果用户的等级不够建立public同义词,可以在system下授权:
grantcreate any synonymtoscott;
grantcreate public synonymtoscott;
引入同义词(Synonym)的原因
在一些商业数据库中,有时信息系统的设计或开发者为了增加易读性,故意定义一些很长的表名(也可能是其它的对象)。这样虽然增加了易读性,但在引用这些表或对象时就不那么方便,也容易产生输入错误。另外在实际的商业公司里,一些用户觉得某一个对象名有意义也很好记,但另一些用户可能觉得另一个名字更有意义。
2000仙客来百货张根发4444944 4444844
2010心太软小商品石铁心1741741 1741742
2021食为天餐具金元宝1671671 1671674
2032食为先餐具陆合彩16816841681684
ORACLE并没有提供修改同义词(Synonym)的命令。如果您要修改某一同义词(Synonym)的话,您要先把它删除掉,之后再重新建立这个同义词(Synonym)。
2032食为先餐具陆合彩16816841681684
您也可能会问,其它用户是否也可以使用同样的方法访问同义词(Synonym)ss。答案是肯定的。如果您还有疑问的话,您可以试着以如下的SQL*PLUS命令(例15-50)以SYS用户登录进入ORACLE数据库。
SQL> CONNECT SYS/ORACLE AS SYSDBA;
创建公用同义词(Synonym)
您可以为supplier表创建一个公用同义词(Synonym)。为了演示方便,您应该从当前的SCOTT用户切换到另一个用户下,如SYSTEM。您可以使用如下的SQL*PLUS命令(例15-44)来完成用户的切换。
SQL> CONNECT SYSTEM/MANAGER
已连接。
SQL>colobject_nameformata20
SQL> SELECTobject_name,object_type, created, statusFROMuser_objects
WHEREobject_typeLIKE 'SYN%';
OBJECT_NAME OBJECT_TYPE CREATED STATUS
取消授权:
revoke create anysynoymfromscott;
revoke create publicsynoymfromscott;
取消同义词:
drop public synonymabc;
授权取消同义词:
grant dorppublic synonym toscott;
取消授权:
revoke drop public synonym toscott;
2000仙客来百货张根发4444944 4444844
2010心太软小商品石铁心1741741 1741742
2021食为天餐具金元宝1671671 1671674
2032食为先餐具陆合彩16816841681684
由于其它用户在引用这一同义词(Synonym)s时必须冠以您的用户名(.).,这样很不方便,而且也容易产生输入错误,所以您可以使用如下的DDL语句为scott用户下的supplier建立一个公用的同义词(Synonym)ss。
*
ERROR位于第2行:
ORA-00942:表或视图不存在
如果您在同义词(Synonym)s之前冠以用户名.(scott.),您就可以得到您所需要的信息了。如下面的查寻语句
SQL&g
结果
S_CODE SNAME CONTACT PHONE FAX
---------- ------------------------- --------------- --------------- -------
FOR对象名;
其中:
Ø PUBLIC:系统中所有的用户都可以访问所创建的同义词
Ø同义词的名字:所创建的同义词的名字
Ø对象名:创建的同义词所基于的对象名
在创建同义词时要注意的事项:
Ø所基于的对象不能包含在任何软件包中
Ø一个私有的同义词不能与任何该用户下的其它对象重名
您刚刚创建的同义词(Synonym)s是一个私有的同义词,即只能在您的用户(SCOTT)下直接引用,如果其它用户引用它就必需冠以用户名.(既scott.s的方式引用)。这样作很不方便。如果您所建的表supplier是一个所有用户共享并经常使用的表,您应该怎样处理这一问题呢?
-------------------- ------------------ ---------- ------
S SYNONYM 28-4月-03 VALID
显示的结果表明:在您的模式(用户)下只有一个同义词(Synonym),那就是您刚刚建立的同义词(Synonym)s。
但是显示的结果并没有告诉您这个同义词(Synonym)到底是基于那个表的及表的主人是谁。如果您有一个这样同义词(Synonym)时,这方面的信息也许就显得特别重要了。您可以使用如下的查寻语句从数据字典user_synonyms中得到这方面的信息。当然为了使SQL*PLUS的显示输出更加清晰您应该先使用如下的SQL*PLUS格式化命令
ORACLE系统提供的同义词(Synonym)就是用来解决以上的难题的。设想一下在您的日常工作中您每天都要使用supplier表许多次,而且您的英文打字的水平并不高。在这种情形下,您就可以借助于同义词(Synonym)来帮助您提高生产力。
怎样创建同义词(Synonym)
现在您就可以使用如下的CREATE SYNONYM语句(例15-38)为表supplier建了一个同义词(别名)s。
SQL>coltable_ownerfor a12
SQL>coltable_namefor a12
SQL> SELECTsynonym_name,table_owner,table_nameFROMuser_synonyms;
SYNONYM_NAME TABLE_OWNER TABLE_NAME
------------------------------ ------------ ----------
同义词已丢弃。
虽然结果已经显示:“同义词已丢弃。”,但是为了谨慎起见,您还是应该使用如下的查寻语句查看一下数据字典user_objects。
SQL> SELECTobject_name,object_type, created, status