同义词
同义词(synonym)是表、索引和视图等模式对象的一个别名。同义词只是数据库对象的替代名,与视图类似,同义词并不占用实际存储空间,只在数据字典中保存同义词的定义。在使用同义词时,Oracle简单地将它翻译成对应方案的名称。
通过使用同义词,一方面可以简化对象访问,如数据字典视图 USER_INDEXES 的同义词为IND,数据字典视图USER_SEQUENCES的同义词为SEQ;另一方面可以提高对象访问的安全性,如屏蔽对象所有者、对象名和数据库链接名。
在开发数据库应用程序时,应当尽量避免直接引用表、视图或其他数据库对象打的名称,而改用这些对象的同义词。这样可以避免当管理员对数据库对象做出修改和变动之后,必须重新编译应用程序。使用同义词后,即使引用的对象发生变化,也只需要在数据库中对同义词进行修改,而不必对应用程序做任何改动。
在Oracle中可以创建两种类型的同义词:
- 共用同义词(public synonym): 共有同义词是由PUBLIC用户组所拥有,数据库中所有的用户都可以使用共有同义词。
- 私有同义词(private synonym): 私有同义词是由创建它的用户(或方案)所拥有,也称方案同义词(schema synonym)。用户可以控制其他用户是否有权使用属于自己的方案同义词。
在创建同义词时,它所基于的对象可以 不存在 ,并且创建同义词的用户也不需要对基础对象有任何访问权限。
语法如下
CREATE [OR REPLACE][PUBLIC] SYNONYM synonym_name
FOR [schema.]object;
为模式TEMP中的表sys_user创建一个共有同义词public_user,尽管该模式并不存在。
create public synonym public_user
for temp.sys_user;
如果同义词所对应的基础对象不存在,则当用户访问时同义词将重新编译,并验证为无效。
在操作过程中,不能修改或改变同义词,而只能删除。
删除刚刚创建的同义词
drop public synonym public_user;
Oracle在数据字典中将保存创建同义词的定义。通过数据字典视图 USER_SYNONYMS ,可以查询有关同义词的信息。