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

tod*_*not 6 sql oracle oracle11g oracle12c

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

select
   *
from
   tab1 a
where
   not exists
         (select
                *
           from
               (select
                    *
                from
                    tab2 b
                where a.X = b.X))
Run Code Online (Sandbox Code Playgroud)

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

Dr *_*Wit 2

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

Oracle 10g R1 中也具有使用超过 1 级的相关子查询的能力,并且已正确记录(https://docs.oracle.com/cd/B14117_01/server.101/b10759/queries007.htm)支持这些天...

当嵌套子查询引用表中的列时,Oracle 将执行相关子查询,该表引用了子查询之上任意级别的父语句。

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

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

此外(如果您有访问权限),您还可以在 Metalink 上看到错误 15990897:在二级子查询中使用相关变量的查询因 ORA-904 失败(已在产品版本 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 中启用,但文档尚未修复,并且显然新功能指南中没有提及此改进。

附言。据我记得标准 SQL 2003 只允许关联到一层深度 - 欢迎每个人检查(http://www.wiscorp.com/sql_2003_standard.zip)。但无论如何,Oracle 有很多高于标准的改进。