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的所有这些更改是否记录在某处?
为了解释这一点,我们需要深入了解一下历史。
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 有很多高于标准的改进。
归档时间: |
|
查看次数: |
317 次 |
最近记录: |