0%

oracle 11g 的同义词

1. 含义

同义词是现有对象的一个别名。主要是用于简化SQL语句、隐藏对象的名称和所有者和提供对对象的公共访问。

同义词存在私有同义词和公有同义词两种类型。公有同义词可被所有的数据库用户访问,而私有同义词只能在其模式内访问,且不能与当前模式的对象同名。

2. 创建

创建同义词的用户需要有创建对应私有同义词或公有同义词的权限

2.1 私有同义词

1
2
-- 创建 scott 模式的 emp 的同义词 syn_emp
create synonym syn_emp for scott.emp;

创建完上述的私有同义词后,在 scott 用户下,便可以使用 syn_emp 代替查询 scott.emp 表:

1
2
-- 同 select * from scott.emp
select * from syn_emp;

2.2 公有同义词

1
2
-- 创建公有同义词,所有具备查询 scott.emp 表权限的模式都可以使用该同义词
create public synonym pub_emp for scott.emp;

3. 创建或替换

1
2
-- 创建同义词 syn_dept 或替换 syn_dept
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 究竟是什么…

1
select * from 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
------ 本文结束------