1. 含义
同义词是现有对象的一个别名。主要是用于简化SQL语句、隐藏对象的名称和所有者和提供对对象的公共访问。
同义词存在私有同义词和公有同义词两种类型。公有同义词可被所有的数据库用户访问,而私有同义词只能在其模式内访问,且不能与当前模式的对象同名。
2. 创建
创建同义词的用户需要有创建对应私有同义词或公有同义词的权限
2.1 私有同义词
1 2
| create synonym syn_emp for scott.emp;
|
创建完上述的私有同义词后,在 scott 用户下,便可以使用 syn_emp 代替查询 scott.emp 表:
2.2 公有同义词
1 2
| create public synonym pub_emp for scott.emp;
|
3. 创建或替换
1 2
| create or replace synonym syn_dept for scott.dept;
|
4. 删除
1 2 3 4
| drop synonym syn_dept;
drop public synonym pub_emp;
|
5. TAB
我们常常会使用如下语句查询当前用户下具备有哪些表,现在来一探究竟 tab 究竟是什么…
查看下述第一个查询示例,可以发现 tab 属于 public 用户的一个同义词。从第二个查询示例可以发现,public 用户的 tab 属于 sys 用户。综上,tab 本质是 sys 用户的一个视图对象,也是 public 用户的一个同义词。
1 2 3 4 5 6
| SQL> select OWNER, OBJECT_NAME, OBJECT_TYPE from all_objects t where t.OBJECT_NAME = 'TAB';
OWNER OBJECT_NAME OBJECT_TYPE
SYS TAB VIEW PUBLIC TAB SYNONYM
|
1 2 3 4 5 6
| SQL> select OWNER, SYNONYM_NAME, TABLE_OWNER, TABLE_NAME from all_synonyms t where t.TABLE_NAME = 'TAB';
OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME
PUBLIC TAB SYS TAB SYSTEM TAB SYS TAB
|