4 Replies Latest reply: Nov 29, 2012 2:49 AM by 920412 RSS

    9iで使用していた(+)は11gR2では使用できないのでしょうか

    920412
      oracle 9iから11gR2に移行を考えています。
      9iのとき、(+)を使用していた外部結合の部分がエラーとなります。
      この部分がエラーとならずに済む方法は、SQL文の変更しかないのでしょうか。
        • 1. Re: 9iで使用していた(+)は11gR2では使用できないのでしょうか
          asahide
          具体的にはどのようなエラーが発生しているのでしょうか?
          ORA-01719とかでしょうか?

          また、Oracleのバージョンは細かく記載した方が良いです。
          • 2. Re: 9iで使用していた(+)は11gR2では使用できないのでしょうか
            920412
            ご回答ありがとうございます。
            ご指摘の通り、環境を提示します。

            環境
            サーバ
            Oracle 11.2.0.2
            OS: WindowsServer2008R2

            追記として
            以下の事象が発生しています。
            9iで作成したDBを11gR2に移行しました。
            その際、以下のSQLエラーが発生しました。
            ORA-00979: GROUP BYの式ではありません。
            9iから10gR2に移行(EXPORT-IMPORT)したときは、エラーとはなりません。
            なにか環境等で違いがあるのでしょうか。

            以下のSQL文となります。

            SELECT
            DISTINCT EXH_DAICHONO ,EXH_YUSYUTUSYANM1 ,EXH_DSCHNM ,EXH_SERVICER ,EXH_SERVICED ,EXI_INVOICENO
            FROM
            (SELECT
            EXH_DAICHONO, EXH_YUSYUTUSYANM1, EXH_DSCHNM, EXH_SERVICER, EXH_SERVICED, EXH_SONYKBN2,
            MIN(EXI_INVOICENO) AS EXI_INVOICENO
            FROM
            D_YUSYUTUD, D_YUSYUTUDINV
            WHERE
            EXH_DAICHONO = EXI_DAICHONO(+)
            GROUP BY
            EXH_DAICHONO, EXH_YUSYUTUSYANM1, EXH_DSCHNM, EXH_SERVICER, EXH_SERVICED)
            WHERE
            1 = 1 AND (EXH_SONYKBN2 IS NULL)
            ORDER BY
            EXH_YUSYUTUSYANM1,EXH_DSCHNM,EXH_SERVICER,EXH_SERVICED,EXI_INVOICENO,EXH_DAICHONO;

            以上です。
            (+)が影響していると思ったのですが、単純な(+)を使用しているSQL文は問題なく動作しました。
            以上です。
            • 3. Re: 9iで使用していた(+)は11gR2では使用できないのでしょうか
              asahide
              11gR2でも(+)は使えます。
              ちなみにこの(+)をOUTER JOIN形式に変えたらどうなりますか?


              GROUP BYのチェックが厳しくなり、GROUP BYに入っていない列名はSELECT対象として入れられなくなったようです。
              一応こちら<<http://doc.adminschool.net/oracle/db112/server.112/b56299/statements_10002.htm#i2065646>>の「SELECT構文のリストの制限事項」辺りをご参照。

              (11.1までは979が出る、という記載はない<<http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E05750-03/statements_10.htm#5538>>)



              確認可能ならサポートサイト等で確認されてみてはと存じます。。
              • 4. Re: 9iで使用していた(+)は11gR2では使用できないのでしょうか
                920412
                ご回答ありがとうございます。とても明確で助かりました。
                いただいたHPを参考に、現在サポートに問い合わせ中です。
                ありがとうございました。