为什么Oracle允许在WITH子句中使用相同的alias_name创建多个子查询?

Dmi*_*kov 15 sql oracle common-table-expression

它看起来有点滑稽,但Oracle 11g确实允许这样的查询运行

with
    a as (select 1 from dual),
    a as (select 2 from dual)
select  *
from    a;
Run Code Online (Sandbox Code Playgroud)

它返回第一个子查询的结果(即1).

我无法想象这种特征可能有用的情况.在我的情况下,当我忘记在复制/粘贴它后重命名子查询并且整个查询返回错误/意外结果时,它会引起问题.幸运的是,查询非常简单,并且立即检测到了原因.

无论如何,我希望Oracle在这种情况下抛出异常.

所以,我的问题是这样的行为是特征还是错误?如果功能,它可能有用吗?

谢谢.

顺便说一句,SQLite不允许类似的查询运行并抛出'重复的WITh表名'异常.还没试过任何其他数据库引擎.

Mar*_*son -2

它没什么用,但它与 Oracle 处理重复列名的方式一致。