首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ORA-01446 -无法从视图中选择ROWID,具有DISTINCT、GROUP等。

ORA-01446 -无法从视图中选择ROWID,具有DISTINCT、GROUP等。
EN

Stack Overflow用户
提问于 2012-03-21 14:29:21
回答 3查看 21.5K关注 0票数 5

我创建了一个在select子句中有一个不同的视图。

当我尝试使用"select * from“选择所有记录时,我会得到以下错误:

代码语言:javascript
运行
复制
ORA-01446: cannot select ROWID from view with DISTINCT, GROUP BY, etc.

我想知道为什么会发生这样的事情,于是我想到了这一点:

您尝试创建一个视图,其中包括SELECT语句中的ROWID以及一个子句,例如DISTINCT或GROUP。这是不允许的。参考文献

这很尴尬,因为视图中的select语句没有选择rowid,也没有在任何其他子句(where,order等)中使用。

对此有什么想法吗?

更新

我无法发布查询本身,但我发布了一个类似的外观。下面是:

代码语言:javascript
运行
复制
SELECT DISTINCT t1.c1 TABLE1_C1,
t1.c2 TABLE1_C2,
t1.c3 TABLE1_C3,
t1.c4 TABLE1_C4,
t1.c4 TABLE1_C4,
t1.c5 TABLE1_C5,
t1.c6 TABLE1_C6,
t1.c7 TABLE1_C7,
t1.c8 TABLE1_C8,
t2.c1 TABLE2_C1,
t2.c2 TABLE2_C2,
t2.c3 TABLE2_C3,
t2.c4 TABLE2_C4,
t2.c5 TABLE2_C5,
t3.c1 TABLE3_C1,
t2.c6 TABLE2_C6,
t4.c1 TABLE4_C1,
t4.c2 TABLE4_C2,
t4.c3 TABLE4_C3
  FROM table1 t1
  LEFT JOIN table2 t2
  ON t1.c1 = t2.c7
  left JOIN table4 t4
  ON t4.c4 = t2.c1
  LEFT JOIN table3 t3
  ON (t2.c1 = t3.c2
  AND t2.c8 = t3.c3
  AND t2.c9 = t3.c4)
  WHERE (t2.cp5  = 0 or t2.cp5 is null)
  AND (t2.c3  =
    (SELECT MAX(c3)
    FROM table2 s_t2
    WHERE s_t2.c3 LIKE t2.c3
    AND s_t2.c7 = t1.c1
    ) or t2.c3 is null)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-24 07:13:17

如果使用distinct或group按几行划分,则可以限定条件。因此,不同的执行将返回不同的行id和另一个问题,如果有几行符合条件,您将返回哪一行?

这根本没有道理

票数 2
EN

Stack Overflow用户

发布于 2017-03-06 18:13:02

不确定OP在做什么,因为查询中没有ROWID。但这可能会有所帮助--只需添加一个列别名:

代码语言:javascript
运行
复制
SQL>select  * from (select rowid from dual union select rowid from dual);
select  * from (select rowid  from dual union     select rowid from dual)
        *
ERROR at line 1:
ORA-01446: cannot select ROWID from, or sample, a view with DISTINCT, GROUP BY, etc.


SQL>select * from (select rowid as row_id from dual union select rowid from dual);

ROW_ID
------------------
AAAAB0AABAAAAOhAAA

1 row selected.
票数 2
EN

Stack Overflow用户

发布于 2017-09-13 21:00:19

另一种可能性:在过去的3天里,我刚刚经历了这个错误,我有另一种可能导致这种错误的组合。

  1. 您的查询使用ANSI样式的联接和
  2. 所涉及的一个或多个表是物化视图或表,该视图或表授予查询重写选项。

您可能会得到Oracle错误:

ORA-01445:无法在没有密钥保存表的情况下从连接视图中选择ROWID或示例

我们最终发现,大型查询中的两个表具有此选项集,并且正在抛出此错误。该权限已被授予这两个表的架构。

花了这么长时间才确定这是原因,因为: 1)表属于另一个团队,2)表授予我们的模式查询重写权限,但是查询(在日常工作中编译)直到3周后,即系统更新之后才失败。

授予此权限的团队已经撤销了该权限,但问题仍然存在。因此,我们日常工作的短期工作是在行动中增加以下内容:

代码语言:javascript
运行
复制
ALTER SESSION SET QUERY_REWRITE_ENABLED = FALSE;

后续问题我们有:

  1. 我们仍在考虑如何迫使优化器重新解析查询,以识别我们不再拥有此权限,但可能需要重新启动系统。
  2. 虽然我认识到一个物化视图产生了一个物理表,但我仍然在问自己为什么不属于mview的表会被授予这个权限。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9806657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档