【问题标题】:can we create synonym with the same name in same schema我们可以在同一架构中创建具有相同名称的同义词吗
【发布时间】:2014-06-05 05:29:28
【问题描述】:

我正在准备 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. 

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

【问题讨论】:

  • :对我有用!!! ,我有一个疑问,你试过create public synonym scott.emp for scott.emp还是create public synonym emp for scott.emp,意思是你把schema_name放在同义词之前吗?
  • 没有。我刚试过,我帖子里提到的
  • 公共同义词不能有任何模式名称 - 这就是它是公共的原因!
  • 将 B 的域添加到 Google 个人阻止列表的另一个原因。

标签: sql oracle object synonym


【解决方案1】:

你可以拥有:

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

但不能有:

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

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

  • USER、ROLE 和 PUBLIC SYNONYM 对象位于它们自己的集体命名空间中。
  • TABLE、VIEW、SEQUENCE、PRIVATE SYNONYM 和用户定义的 TYPE 对象在给定架构中拥有自己独特的命名空间。
  • INDEX 对象在给定架构中有自己的命名空间。
  • CONSTRAINT 对象在给定架构中有自己的命名空间。

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

【讨论】:

  • 如果我在具有相同名称的公共同义词的表上进行选择,结果是什么?表结果还是公共同义词表结果?
  • @Milaci 我测试过,只能选择表格结果,不能选择公共同义词表格结果。
【解决方案2】:

公共同义词是非模式对象,而私有同义词作为表是模式对象。

  • USERROLEPUBLIC SYNONYM 位于它们自己的集体命名空间中。
  • TABLE, VIEW, SEQUENCE, PRIVATE SYNONYM 拥有自己独特的命名空间。
  • INDEX 有自己独特的命名空间。
  • CONSTRAINT 对象在给定架构中拥有自己独特的命名空间

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

记住,你可以拥有:

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

你不能拥有:

  • 一个表和一个私有同义词在同一个模式中同名。

【讨论】:

    猜你喜欢
    • 2021-06-07
    • 2018-10-21
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    相关资源
    最近更新 更多