- 9i で有効だった SQL 文は 11g でも有効ですか?
- 9i では利用できなかった 11g の新機能はありますか?
- 9i の有効な SQL ステートメントと 11g の同じステートメントの間に動作の違いはありますか?
3 に答える
9iで有効だったSQLステートメントは11gでも有効です。Oracleは、下位互換性を確保するために非常に懸命に取り組んでいます。もちろん、古いバージョンのOracleが、新しいバージョンで正しくエラーが発生するエラーを発生させるのではなく、実際には構文的に無効なSQLステートメントを受け入れる場合があります。しかし、それは非常にまれです。
さまざまなバージョンのOracleで追加された機能に関心がある場合は、「新機能ガイド」の「SQL言語の改善」の章と「SQLリファレンス」の「SQL言語の新機能」の章を参照してください。
あなたが行動の違いについて尋ねているなら、それらは主に誤った仮定への依存に関係しています。たとえば、多くの人は
ORDER BY
、クエリに。が含まれている場合、句を指定する必要はないと想定していましたGROUP BY
。これは、オラクルが推奨した仮定ではありませんでしたが、オラクルはたまたまデータをソートして実行しましたGROUP BY
。10.2で操作によるハッシュグループ化が追加されたとき、Oracleはデータをグループ化の副産物として常にデータをソートすることはなくなりました。ORDER BY
そのため、多くの開発者は、句を追加するためにコードに戻る必要がありました。他のSQLステートメントは、オプティマイザー設定が異なるため、11gではパフォーマンスが異なります(特に、9iでルールベースのオプティマイザーから移行する場合)。
9iで有効だったSQLステートメントは11gでも有効ですか
以前に有効だったSQLステートメントが後のバージョンで無効になる場合がありました。たとえば、Oracle 8と9の間のIIRCでは、mod
関数を中置演算子として使用することは違法になりました。つまりselect 12 mod 3 from dual
、Oracle 8では有効ですが、Oracle 9select mod(12,3) from dual
では無効です(両方のバージョンで有効です)
9iでは利用できなかった11gの新機能はありますか
はい、もちろんですが、それらをリストすると、この回答の範囲を超えてしまいます。
有効な9iSQLステートメントと11gの同じステートメントの間に動作の違いはありますか
望ましくない「影響」につながる可能性のある動作の違いがあります。2つの例:
クエリオプティマイザ。すべての新しいバージョンでは、新しいクエリオプティマイザが古いクエリオプティマイザとは異なる劣ったプランを選択する可能性があるため、一部のクエリの実行が大幅に遅くなる可能性がわずかにあります。
グループ化:Oracle 9iまでは、
group by
ソートされた結果を提供していました。(ドイツ語の「L、M、N、O、 Ö、P、Q」のような言語固有の順序を考慮してorder by
いるため、とはまったく同じ順序ではありませんが、多くの目的には十分でした) 。そのため、多くの開発者は、条項と同一である場合に条項を省略しました。これはOracle10gで変更されました。明らかに、10gはグループ化にソートされたツリーの代わりにハッシュテーブルを使用します。そのため、一部のプログラムでは、10gと9iで異なる結果が得られました。 (注:注文された結果が期待されたときに省略することは常に悪い考えでした)order by
group by
order by
group by
order by
はい、もちろん。http://docs.oracle.com/cd/B28359_01/server.111/b28286/wnsql.htm#sthref5など、Oracle Database SQL 言語リファレンスの最初の章を参照してください。