我们可以在同一模式中创建具有相同名称的同义词

时间:2014-04-21 07:00:40

标签: sql oracle object synonym

我正在准备SQL Expert认证,我发现了一个问题而且它说,这是正确的选择。而且,在四个中,一个选项说A table and a synonym can have the same name in the same schema

而且,根据我的知识,在oracle中我们创建的任何被视为对象的东西,这意味着当我们说create synonym时,这意味着我们正在创建新对象。并在Oracle或任何数据库AFAIK中不允许的相同模式中创建相同的对象。

即使Burleson

  

您可以拥有同名的公共和私人同义词。事实上,   您可以在SCOTT中拥有一个名为EMP的公共和私人同义词   架构并在同一架构中有一个名为EMP的表

所以,我试过了。

create synonym emp for scott.emp

它显示了一些错误object already exist

然后我试了

create public synonym emp for scott.emp. 

而且,同样的错误。所以,任何人请分享一些关于同义词的知识。我们可以在同一模式中创建具有相同名称的同义词吗?

2 个答案:

答案 0 :(得分:5)

你可以:

  • 同名的表和公共同义词
  • 同名的公共同义词和私人同义词

但不能有:

  • 同一架构中具有相同名称的表和专用同义词

首先要注意的是,公共同义词是非模式对象,而私有同义词和表是。另一个是数据库对象名称的唯一性由命名空间定义。正如SQL专家学习指南中所述:

  • USER,ROLE和PUBLIC SYNONYM对象位于各自的集合命名空间中。
  • TABLE,VIEW,SEQUENCE,PRIVATE SYNONYM和用户定义的TYPE对象在给定模式中具有自己唯一的命名空间。
  • INDEX对象在给定的架构中有自己的命名空间。
  • CONSTRAINT对象在给定模式中有自己的命名空间。

因此,只要对象不共享相同的命名空间,您就可以为它们指定相同的名称。 希望这会有所帮助。

答案 1 :(得分:0)

当作为表的私有同义词是架构对象时,公共同义词是非架构对象。

  • USERROLEPUBLIC SYNONYM位于自己的集体命名空间中。
  • TABLEVIEWSEQUENCEPRIVATE SYNONYM拥有自己独特的命名空间。
  • INDEX有自己独特的命名空间。
  • CONSTRAINT对象在给定架构中具有自己唯一的命名空间

虽然对象不共享相同的名称空间,但您可以为它们指定相同的名称。

请记住,您可以:

  • 具有相同名称的表和公共同义词
  • 公共同义词和同名的私人同义词

你不能拥有:

  • 一个表和同一模式中具有相同名称的私有同义词。