【问题标题】:Quering Oracle materialized view - column ambiguously defined查询 Oracle 物化视图 - 列定义不明确
【发布时间】:2012-10-20 19:01:42
【问题描述】:

我在 Oracle 中查询视图时遇到问题。

这里是视图(my_cool_view)定义:

SELECT *
  FROM mview1 JOIN
       mview2 USING(col_id) 

其中 mview1mview2 是物化视图。我无法访问此物化视图的定义。我试过这个查询:

select r.title from my_cool_view r;

并得到 ORA-00918: column ambiguously defined 错误。 my_cool_view 中的列子集出现此错误。

如果我运行这个查询:

select * from my_cool_view;

一切正常。

您在询问 cmets 中的 desc my_cool_view,抱歉我无法提供架构信息,因为它是机密的。我唯一可以说它包含大约 80 列,并且只有一个 (col_id) 不会导致上述错误。

您对这是什么情况以及如何解决它有任何想法吗?

提前致谢。

抱歉误导了你,第一个版本的问题太糟糕了。

【问题讨论】:

  • 您可能在视图中定义了两次列标题。你能添加它的描述吗? (SQL*Plus 中的“desc my_cool_view”)
  • 我刚刚检查过 - 列定义一次。你的描述是什么意思?
  • 你能用desc my_cool_mview的输出更新你的问题吗?
  • 请贴出物化视图的ddl。
  • 你能确认这是物化视图而不是普通视图吗?

标签: oracle view materialized-views


【解决方案1】:

您可能有 2 个名为 title 的列来自您加入的不同表/视图。如果您选择 *,那么这将起作用,因为重复的标题列将获得不同的别名(如 TITLE1)。当您明确要求标题列之一时,数据库需要知道您想要哪一个,从而引发错误。

只需确保标题列具有不同的别名:

   select EMP.TITLE EMP_TITLE, DEPT.TITLE DEPT_TITLE
   FROM   ...

【讨论】:

  • 如果你有一个物化视图,那么 Oracle 已经创建了一个具有 unique 列名的表。
  • @Diedirik Hoogenboom,当我 select * from my_cool_view 我只有一个 title 列(title1 不存在)。因此,似乎标题没有重复。我说的对吗?
猜你喜欢
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多