Oracle Top-N查询:保证订购结果?

Dou*_*las 5 sql oracle

大多数来源,包括Oracle自己的Top-N Queries文章,都提供了类似于以下内容的语法来执行Top-N查询:

SELECT val
FROM (
    SELECT val
    FROM rownum_order_test
    ORDER BY val DESC
)
WHERE ROWNUM <= 5;
Run Code Online (Sandbox Code Playgroud)

这保证给出前5个值; 但是,它是否保证以正确的顺序给予它们?这个问题引用维基百科,但另有说明:

尽管某些数据库系统允许在子选择或视图定义中指定ORDER BY子句,但其中的存在无效.

这是否意味着上述代码不保证任何订购,并且需要额外的ORDER BY,或者是特殊情况?

SELECT val
FROM (
    SELECT val
    FROM rownum_order_test
    ORDER BY val DESC
)
WHERE ROWNUM <= 5
ORDER BY val DESC;   -- Is this line necessary?
Run Code Online (Sandbox Code Playgroud)

编辑:假设外部查询将直接执行(不嵌套在另一个查询中).我提出这个问题是因为感觉像是一个明显的遗漏,没有任何消息来源(包括甲骨文)不愿意提到它的需要ORDER BY,尽管从这样的前n个查询中可以直观地预期排序.