我正在准备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.
而且,同样的错误。所以,任何人请分享一些关于同义词的知识。我们可以在同一模式中创建具有相同名称的同义词吗?
答案 0 :(得分:5)
你可以:
但不能有:
首先要注意的是,公共同义词是非模式对象,而私有同义词和表是。另一个是数据库对象名称的唯一性由命名空间定义。正如SQL专家学习指南中所述:
因此,只要对象不共享相同的命名空间,您就可以为它们指定相同的名称。 希望这会有所帮助。
答案 1 :(得分:0)
当作为表的私有同义词是架构对象时,公共同义词是非架构对象。
USER
,ROLE
和PUBLIC SYNONYM
位于自己的集体命名空间中。TABLE
,VIEW
,SEQUENCE
,PRIVATE
SYNONYM
拥有自己独特的命名空间。INDEX
有自己独特的命名空间。CONSTRAINT
对象在给定架构中具有自己唯一的命名空间虽然对象不共享相同的名称空间,但您可以为它们指定相同的名称。
请记住,您可以:
你不能拥有: