Oracle 12c文档,用于SQL的更改/新功能

问题描述 投票:6回答:1

我刚刚发现Oracle 12c支持将几个级别的查询关联起来,这在11g和以前的版本中是不受支持的。

select
   *
from
   tab1 a
where
   not exists
         (select
                *
           from
               (select
                    *
                from
                    tab2 b
                where a.X = b.X))

但我无法在Oracle网站上找到这个文档。是否有任何其他此类隐藏的SQL功能添加到Oracle 12c?在12c中对SQL的所有这些更改是否记录在某处?

sql oracle oracle11g oracle12c
1个回答
0
投票

为了解释这一点,我们需要深入了解历史。

能够使用超过1级的相关子查询的能力也在Oracle 10g R1中,并且在那些日子里被正确记录(https://docs.oracle.com/cd/B14117_01/server.101/b10759/queries007.htm)...

当嵌套子查询从引用父语句的表引用子查询上方任意数量级别的列时,Oracle会执行相关子查询。

......但它没有正常工作。 :)

因此,从Oracle 10g R2开始,此功能已被禁用,文档已更改。

另外(如果您有访问权限),您可以在Metalink上看到错误15990897:使用ORA-904在2级级别的子故障中使用的相关变量查询(在产品版本12.1.0.1.0中已修复)。我不确定为什么它被视为一个错误,因为它根据文档(10g R2,11g R1,11g R2)工作,但事实就是这样。

因此,功能在10.1之后和12.1之前被禁用,但文档甚至12.2(https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/Using-Subqueries.html)说

当嵌套子查询引用从子查询上方一级的父语句引用的表中的列时,Oracle会执行相关子查询。

简而言之,此功能在12c R1和12c R2中启用,但文档并未修复,显然在新功能指南中没有提及此改进。

PS。据我所知,标准SQL 2003只允许一个级别的深度相关 - 欢迎大家查看(http://www.wiscorp.com/sql_2003_standard.zip)。但无论如何,Oracle在标准上有很多改进。

© www.soinside.com 2019 - 2024. All rights reserved.