Oracle 10g:在视图中排序兄弟

Posted

技术标签:

【中文标题】Oracle 10g:在视图中排序兄弟【英文标题】:Oracle 10g : ORDER SIBLINGS inside a VIEW 【发布时间】:2011-06-16 14:05:34 【问题描述】:

是否可以在视图中添加 ORDER SIBLINGS BY fieldName? 我有一个层次结构,其中我成功地使用了具有 CONNECT BY 功能的查询。

但是,当我在视图定义中添加 ORDER SIBLINGS BY fieldName 时,Oracle 给出了一个奇怪的括号错误。

drop view myview;
create view myview as (
select id, level as depth, label, parentid, orderhint, 
       connect_by_root myfield1 "myfield1", connect_by_root id "toplevelparentid"
  from mytable
  connect by prior id = parentid
  start with id in (select id from mytable where parentid is null)
  order siblings by orderhint
);

没有 ORDER SIBLINGS BY 或在视图定义之外,它就像一个魅力。否则,我得到:

ORA-00907:缺少右括号

【问题讨论】:

不推荐,在视图中使用ORDER BY,因为它对使用视图的人来说并不明显(但看不到生成它的查询)——浪费资源 这不是一个普通的视图,它有一个特殊的用途。我不能提供所有细节,但这里的顺序至关重要。还是谢谢。 【参考方案1】:

您是否尝试过删除括号:

drop view myview;
create view myview as
select id, level as depth, label, parentid, orderhint, 
connect_by_root myfield1 "myfield1", connect_by_root id "toplevelparentid"
from mytable
connect by prior id = parentid
start with id in (select id from mytable where parentid is null)
order siblings by orderhint;

【讨论】:

我尝试了很多东西,但不是这个简单的技巧。谢谢!无论如何,Oracle 的错误消息可能更具描述性,而不仅仅是“缺少右括号”,甚至不是这种情况......

以上是关于Oracle 10g:在视图中排序兄弟的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

Oracle 10g - 链接具有不同用户权限的两个视图

linux下,oracle的视图中中文变问号了,描述有点长,请不吝赐教

oracle物化视图

Oracle物化视图错误:包含代码

在 Oracle 上使用 ORDER 插入