Oracle SQL如何解决同义词和表之间的命名冲突?

时间:2013-02-11 14:38:23

标签: oracle10g

我的服务器上有一个公共同义词用于交易:但是我希望能够使用我自己的本地版本的表格,以免打扰其他用户。

Oracle的SQL是否以可预测的方式解决了这样的命名冲突?

换句话说,如果另一个用户创建了一个名为TRANSACTION的公共同义词,我会这样做:

CREATE TABLE TRANSACTION (

ID NUMBER

);

写作时

select * from TRANSACTION

我是否保证Oracle始终会解析同义词或本地表?

(我知道我可以在技术上指定schema.TRANSACTION来强制解决问题,但在我的情况下,这需要我修改/重建一个应用程序,我希望能节省一些工作。)

1 个答案:

答案 0 :(得分:4)

您对名称解析的理解是正确的。 Oracle将首先查看当前架构以查找具有该名称的对象。因此,如果发生冲突,它将在当前模式中选择一个对象,而不是公共同义词引用的对象。

http://docs.oracle.com/cd/B28359_01/server.111/b28310/general008.htm

  

Oracle数据库尝试限定名称的第一部分   在SQL语句中引用。例如,在scott.emp中,scott是   第一件。如果只有一件,那么一件就是   被认为是第一件。

     

在当前架构中,数据库搜索名称对象   匹配对象名称的第一部分。如果没有找到这样的话   一个对象,它继续步骤b。

     

数据库搜索与第一个匹配的公共同义词   一块名字。如果找不到,则继续步骤c。

     

数据库搜索名称与第一部分匹配的架构   对象名称。如果找到一个,则返回步骤b,现在使用   第二段名称作为在限定条件中找到的对象   架构。如果第二件不对应于中的一个物体   以前合格的架构或没有第二块,   数据库返回错误。

     

如果在步骤c中未找到任何模式,则该对象不能被限定   数据库返回错误。

话虽如此,这是公共同义词的问题之一。拥有这样的对象会导致混乱,无论是发展还是支持。在两种情况下,最好按所有者和名称引用对象