同义词的概念:
同义词是Oracle对象的别名,使用同义词访问相同的对象
可以为表、视图、存储过程、函数或另一同义词等对象创建同义词
方便访问其它用户的对象,隐藏了对象的身份
缩短对象名字的长度
同义词创建语法:
CREATE [PUBLIC] SYNONYM synonym_name FOR object;
创建和删除同义词的权限:
- CREATE ANY SYNONYM
- CREATE PUBLIC SYNONYM
- DROP PUBLIC SYNONYM
- DROP ANY SYNONYM
创建同义词举例:
SQL> conn / as sysdba 已连接。SQL> grant create public synonym to scott;授权成功。SQL> grant create any synonym to scott;授权成功。SQL> conn scott/tiger 已连接。SQL> create public synonym mydept for dept; ##创建公有同义词,其它用户也可以访问同义词已创建。SQL> create synonym mydept for dept; ##创建私有同义词,只有Scott才可以访问,与公共同义词同名,并没有报错 同义词已创建。
删除同义词:
SQL> drop public synonym mydept;同义词已删除。SQL> select * from mydept; ##删除共有同义词,私有的还在DEPTNO DNAME LOC ---------- -------------- -------------10 ACCOUNTING NEW YORK20 RESEARCH DALLAS30 SALES CHICAGO40 OPERATIONS BOSTONSQL> drop synonym mydept; 同义词已删除。
SQL> select * from mydept; select * from mydept* 第 1 行出现错误: ORA-00942: 表或视图不存在
查看同义词视图:
SQL> select * from user_synonyms;SYNONYM_NAME TABLE_OWNER TABLE_NAME ------------------------------ ------------------------------ ------------------------------ DB_LINK ------------------------------------------------------------------------------------------------------------------------ MYDEPT SCOTT DEPTSQL> conn / as sysdba 已连接。SQL> SELECT synonym_name,table_owner,table_name FROM dba_synonyms WHERE table_name = 'DEPT';SYNONYM_NAME TABLE_OWNER TABLE_NAME ------------------------------ ------------------------------ ------------------------------ MYDEPT SCOTT DEPT MYDEPT SCOTT DEPT
注意:创建的公共同义词没有出现在user_synonyms视图中