2017-05-11 7 views
6

Oracle 12cでは、11g以前のバージョンではサポートされていないいくつかのレベルの深いクエリの相関がサポートされています。SQLへの変更/新機能のためのOracle 12cドキュメント

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

しかし、これはOracleのWebサイトで確認できませんでした。 Oracle 12cに追加された他の隠されたSQL機能はありますか? 12cのSQL​​へのそのような変更はどこかに書かれていますか?

+2

すべてのリリースには「新機能ガイド」が付属しています。http://docs.oracle.com/database/121/NEWFT/toc.htmこの変更に一致する参照は見つかりません。 –

+0

@a_horse_with_no_nameはい、投稿する前にこれらのドキュメントもチェックしました。私は今、これがOracleによる(SQLを変えるような重要な機能の)不足しているドキュメントのケースであると感じています。 – toddlermenot

+3

もし私があなただったら、私はこの機能に頼っていません。意図した動作(バグなど)ではない可能性があります。 – Boneist

答えて

0

これを説明するには、少し歴史に飛び込む必要があります。 1つの以上のレベルと相関サブクエリを使用する

能力は(https://docs.oracle.com/cd/B14117_01/server.101/b10759/queries007.htm)は、Oracle 10グラムR1でもあったし、それが適切に文書化されたバック当時ときにネストされ...

Oracleは、相関サブクエリを実行しますサブクエリ は、親ステートメントを参照しているテーブルから列を参照し、サブクエリより上の任意の数の のレベルを参照します。

...しかし、正しく動作しませんでした。 :)

Oracle 10g R2以降、この機能は無効になり、ドキュメントが変更されました。あなたはバグ15990897見ることができます(あなたがアクセス権を持っている場合)も

は:2ND LEVELサブクエリで使用相関VARIABLE WITH QUERYを(は、製品バージョン12.1.0.1.0で修正)ORA-904 Metalinkの上で失敗します。私はそれがドキュメント(10g R2、11g R1、11g R2)に従って動作することを考えれば、なぜバグと見なされているのか分かりませんが、それはそうです。

だから、機能性は10.1後に無効とさえ12.2(https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/Using-Subqueries.html)12.1なく、ドキュメントの前に 参照ネストされたサブクエリは、テーブルの列が親の文に言及するとき

Oracleは、相関副問合せを行い、言いました サブクエリの上のレベル。

は長い話を短くカット、この機能は12C R1及び12c R2で有効になっているが、ドキュメントが固定されており、どうやら新機能ガイドのこの改善についての言及はありませんされていません。

PS。私が標準SQL 2003を覚えている限り、1つのレベルだけの相関関係を許可しています - 誰もが(http://www.wiscorp.com/sql_2003_standard.zip)をチェックすることを歓迎します。 しかしOracleには、標準よりも多くの改善点があります。

関連する問題