同义词概述

来源:互联网 发布:成都知美术馆怎么去 编辑:程序博客网 时间:2024/06/07 23:22

同义词是一个模式对象的别名。例如,您可以为一个表或视图、 序列、 PL/SQL 程序单元、 用户定义的对象类型、或另一个同义词等创建同义词。因为同义词只是一个别名,因此除了要在数据字典存储其定义之外,不需要其它存储。

同义词可以为数据库用户简化 SQL 语句。同义词也可以用于隐藏底层模式对象的标识和位置如果必须重命名或移动底层对象,仅需要重新定义同义词。基于同义词的应用程序,可以无需修改而继续工作。

您可以创建私有同义词和公共同义词。私有同义词与其所有者在同一个模式中,只有其所有者对其可用性具有控制权公共同义词由名为PUBLIC的用户组所有,并且能被每一个数据库用户访问

在示例 4-9 中,数据库管理员为 hr.employees 表创建了一个叫做people的公共同义词。然后,用户连接到 oe 模式,并计算通过同义词引用的表中的行的数目。

SQL> CREATE PUBLIC SYNONYM people FOR hr.employees;Synonym created.SQL> CONNECT oeEnter password: passwordConnected.SQL> SELECT COUNT(*) FROM people;COUNT(*)----------107

请尽量少用公共同义词,因为它们使数据库整合更困难。如 4-9 例中所示,如果另一个管理员尝试创建people公共同义词,则会创建失败,因为在一个数据库中只能存在一个叫做people的公共同义词。过度使用公共同义词会导致应用程序之间的命名空间冲突

SQL> CREATE PUBLIC SYNONYM people FOR oe.customers;CREATE PUBLIC SYNONYM people FOR oe.customers                      *ERROR at line 1:ORA-00955: name is already used by an existing objectSQL> select owner, synonym_name, table_owner, table_name from dba_synonyms where synonym_name = 'PEOPLE';OWNER                  SYNONYM_NAME------------------------------ ------------------------------TABLE_OWNER            TABLE_NAME------------------------------ ------------------------------PUBLIC                 PEOPLEHR                 EMPLOYEES
0 0