1. 私有同义词:普通用户在自己模式下创建的同义词
SQL> create synonym SYNONYMNAME for TABLE;
私有同义词需要授权给其他用户,其他用户才可以查看,授权后,其他用户不仅可以访问同义词,也可以访问基表,反之亦然。
2. 共有同义词:管理员创建,需要有 CREATE PUBLIC SYNONYM权限
SQL> create public synonym SYNONYMNAME for TABLE;
共有同义词需要授权给其他用户,其他用户才可以查看,授权后,其他用户不仅可以访问同义词,也可以访问基表,反之亦然。
3. 如果存在私有同义词和共有同义词同名的情况,则优先访问私有同义词。
SQL> conn sys/oracle@erp as sysdba
Connected.
SQL> create table temp as select empno,ename from scott.emp where deptno=10;
Table created.
SQL> create table temp1 as select empno,ename from scott.emp where deptno=20;
Table created.
SQL> create synonym a for temp;
Synonym created.
SQL> create public synonym a for temp1;
Synonym created.
SQL> select OWNER,SYNONYM_NAME,TABLE_NAME from dba_synonyms where SYNONYM_NAME='A' ;
OWNER SYNONYM_NA TABLE_NAME
---------- ---------- ----------
SCOTT A EMP
SYS A TEMP
PUBLIC A TEMP1
SQL> select * from a;
EMPNO ENAME
---------- --------------------
7782 CLARK
7839 KING
7934 MILLER
SQL> select * from temp;
EMPNO ENAME
---------- --------------------
7782 CLARK
7839 KING
7934 MILLER
SQL>