Oracle SQL Query在12C但不在11g中工作

我有一个Oracle SQL查询在12C中工作正常,但在11g中没有.我在下面给出了一个类似的例子.请解释这是否是12C中修复的错误/增强功能.

CREATE TABLE MSI_OWNER.VINOTH_TEST1
(
  COL1  VARCHAR2(100 BYTE),SAL   NUMBER,YEAR  NUMBER
)

Insert into MSI_OWNER.VINOTH_TEST1   (COL1,SAL,YEAR) Values   ('Vinoth',100,1);
Insert into MSI_OWNER.VINOTH_TEST1   (COL1,2);
COMMIT;

  SELECT col1,(SELECT MAX (its)
            FROM (SELECT MAX (year) its
                    FROM vinoth_test1 x
                   WHERE x.col1 = a.col1))
            max_year,sal
    FROM vinoth_test1 a
GROUP BY col1,sal

请注意,我已经写了一个不同的逻辑来解决这个问题,但我想知道这是11g中的错误还是12C中的增强.

Error in 11g: ORA-00904: "A"."COL1": invalid identifier

解决方法

Oracle文档始终明确表示只允许一个级别的关联(尽管没有明确的原因,并且它违反了SQL标准).

正如其中一位大师Solomon Yakobson在OTN上多次解释,在每个新版本中,在子版本1中(如10.1,11.1),更深层次的关联工作正常,就像OP注意到的那样.它曾经在子版本2(10.2,11.2)中被“修复”(灵活性被收回). 12.1具有相同的“增强”(所有级别的相关性),12.2没有把它拿走 – 尽管文档STILL表示相关性不允许超过一个级别.特别是因为当我们使用WITH子句编写查询时不存在这样的限制,因此Oracle继续使用该限制是没有意义的.

https://docs.oracle.com/database/122/SQLRF/Using-Subqueries.htm#SQLRF52357

当嵌套子查询引用一个表中的一个列时,Oracle执行一个相关子查询,该表引用一个父语句,该语句高于子查询一级[…]

dawei

【声明】:北京站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。