【问题标题】: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】:

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

  • USER、ROLE 和 PUBLIC 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
    相关资源
    最近更新 更多