ORACLE公有/私有同义词(二)
T BYS DEPT
TEST TEST1 SCOTT DEPT
查看当前用户下的同义词
col table_name for a10
col db_link for a10
TEST@bys1>SELECT * FROM USER_SYNONYMS;
SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK
------------------------------ ------------------------------ ---------- ----------
TEST1 SCOTT DEPT
5.使用同义词--就像使用表名一样简单
同一用户下,对象和私有同义词不能同名。对象可以和公有同义词同名;私有同义词也可以和公有同义词同名;但是同一用户下,对象和私有同义词不能同名。
即使用时的优先级:
同名对象>>>同名公有同义词
同名私有同义词>>>同名公有同义词
当使用一个没有指定schema的同义词是,首先在用户自己的schema中寻找,然后再公共同义词中寻找。
同时要注意:
TEST@bys1>create synonym test1 for scott.dept;这语句创建同义词后,如果用户要使用该同义词,必须具有访问scott.emp表的权限。不然报错:表或视图不存在。
TEST@bys1>select * from test1;
select * from test1
*
ERROR at line 1:
ORA-00942: table or view does not exist
TEST@bys1>conn scott/tiger
Connected.
SCOTT@bys1>grant select on dept to test;
Grant succeeded.
SCOTT@bys1>conn test/test
Connected.
TEST@bys1>select * from test1;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
#######################################
使用同义词进行查询示例:--以下四句显示结果都是DEPT表的内容,节约篇幅,未将查询一一贴出。
BYS@bys1>select * from test;
BYS@bys1>select * from test1;
BYS@bys1>select * from test.test1;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
6.删除同义词
删除同义词语法:DROP [ PUBLIC ] SYNONYM [ schema. ] 同义词名称 [ FORCE ];
删除私有同义词
BYS@bys1>SELECT * FROM DBA_SYNONYMS WHERE SYNONYM_NAME like 'TEST%';
OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK
---------- ------------------------------ ------------------------------ ---------- ----------
PUBLIC TEST BYS DEPT
PUBLIC TEST1 SCOTT DEPT
BYS TEST BYS DEPT
TEST TEST1 SCOTT DEPT
BYS@bys1>select * from cat;
TABLE_NAME TABLE_TYPE
---------- -----------
DEPT TABLE
EMP TABLE
SEQ1 SEQUENCE
SYS_TEMP_F TABLE
BT
TEST SYNONYM
BYS@bys1>drop synonym test; 不加PUBLIC关键字时,默认删除的是私有同义词。并且删除同义词后,同义词所对应的对象不受影响。
Synonym dropped.
BYS@bys1>select * from cat;
TABLE_NAME TABLE_TYPE
---------- -----------
DEPT TABLE
EMP TABLE
SEQ1 SEQUENCE
SYS_TEMP_F TABLE
BT
BYS@bys1>SELECT * FROM DBA_SYNONYMS WHERE SYNONYM_NAME like 'TEST%';
OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK
---------- ------------------------------ ------------------------------ ---------- ----------
PUBLIC TEST BYS DEPT
PUBLIC TEST1 SCOTT DEPT
TEST TEST1 SCOTT DEPT
删除公有同义词
BYS@bys1>drop public synonym test1; 指定public关键字删除公有同义词,同义词所对应的对象不受影响。
Synonym dropped.
BYS@bys1>SELECT * FROM DBA_SYNONYMS WHERE SYNONYM_N