sql >> データベース >  >> RDS >> Oracle

明示的なANSIJOINと暗黙的な結合の使用に関するOracleの公式推奨事項はありますか?

    ANSI結合構文の問題と、Oracle構文の使用を推奨する回避策に関するOracleサポートサイトからのメモがいくつかあります。

    バグ5188321の間違った結果(行なし)またはANSI外部結合からのORA-1445

    Versions affected: Versions >= 9.2.0.1 but < 11 
    
    Description
    Wrong results or an ORA-1445 can be returned with a query involving a 
     very large select list count when ANSI OUTER JOIN syntax is used.
    
    
    Workaround
      Use native oracle outer join syntax 
     or 
      reduce the select list count.
    

    バグ5368296ANSI結合SQLは、あいまいな列のORA-918を報告しない場合があります

    Versions affected: Versions < 11
    
    Description
    
    ****
    Note: This fix introduces the problem described in bug 7318276
          One off fixes for that bug address the issue here also.
    ****      
    
    ORA-918 is not reported for an ambiguous column in a query 
    involving an ANSI join of more than 2 tables/objects. 
    
    eg:
     -- 2 table join, returns ORA-918
     SELECT  empno 
     FROM emp a JOIN emp b  on a.empno = b.empno; 
    
     -- 3 table join does not report ORA-918 when it should ...
     SELECT  empno
     FROM emp a JOIN emp b on a.empno = b.empno
                JOIN emp c on a.empno = c.empno;
    

    バグ7670135ANSI結合のコンパイルに長い解析時間がかかる

     Versions affected: Versions BELOW 11.2 
    
    Description
    
    A query having ANSI join(s) may take noticeable time during query compilation,
    especially if the query includes an NVL() function.
    
    Workaround:
     Use ORACLE join instead of ANSI join
    

    OraclePressから-OracleOCP11gオールインワン試験ガイド

    そして、asktom(非コミット)から

     Historically there have been bugs related to ANSI syntax, in fact even the 
     10.2.0.4 projected issues list includes 10 bugs/issues related to ANSI syntax.
    
     In the past I've encountered some of these bugs myself, and have continued to use 
     and advocate the "traditional" Oracle style.
    
     I'd like to know if you feel that the implementation of ANSI syntax is now equally    
     robust compared  to the traditional syntax.
    
     Followup   February 19, 2008 - 5pm Central time zone:
     unfortunately, there are bugs in non-ansi joins too, probably more than 10 in fact.
    
     I personally do not use the new syntax (except in the rare case of a full outer join, 
     a truly rare beast to encounter). I have no comment on it really. 
    

    同じトピックに関する以前の質問も参照してください。Oracleのプラス(+)表記とansi JOIN表記の違いは?

    私もこの声明を文書で見つけましたが、それがどこから来たのかについての言及はありません

    「Oracle9i以降、SQL開発者はOracle独自の(+)構文ではなくANSI結合構文を使用することをお勧めします。この推奨には次のようないくつかの理由があります。

    •分離と読み取りが容易(結合コードと制限コードを混同することなく)•結合コードを正しく構築するのが容易(特に「外部」結合の場合)•ポータブル構文は、MSSQLServerなどの他のすべてのANSI準拠データベースで機能します、DB2、MySQL、PostgreSQLなど•広く受け入れられている標準であるため、将来のすべてのデータベースおよびサードパーティベンダーのツールの一般的なターゲットです•独自のOracle外部結合(+)構文は、次の場所で一方向にのみ使用できます。一度に、完全外部結合を実行することはできません•さらに、Oracleドキュメントからのこれらの追加の制限:o(+)演算子は、任意の式ではなく、列にのみ適用できます。ただし、任意の式に(+)演算子でマークされた1つ以上の列を含めることができます。o(+)演算子を含む条件は、OR論理演算子を使用して別の条件と組み合わせることができません。o条件は、IN比較条件を使用できません。 (+)演算子でマークされた列を式と比較します。o条件では、(+)演算子でマークされた列をサブクエリと比較できません。 "

    したがって、ANSI結合構文を採用し、21世紀に移行するときが来ました



    1. 小数点以下8桁の緯度/経度には、どのMySQLデータ型を使用する必要がありますか?

    2. MySQLの行を更新するためのクエリの更新

    3. OracleD2kFormsでPLSQLコードのパフォーマンスを調整またはテストする方法

    4. Oracleテーブルの内容をファイルにエクスポートするにはどうすればよいですか?