外部結合演算子 (+) の制限事項

便利な外部結合演算子 (+) であるが、以下の制限事項があるため該当する場合は FROM 句での結合を使用する。
(+) 演算子の部分のマニュアルの表記の変化を見ていると、なにやら雲行きが怪しい表現になってきている。

しかし、今後、サポート対象外にするには 動的パフォーマンス・ビュー静的データ・ディクショナリ・ビュー に相当数使われているので、 それらを完全に書き換える必要がある。 これらはルールベース・オプティマイザ (RBO) 廃止という目標に比べてパフォーマンス上の恩恵がみえないにも関わらず、 ルールベース廃止のときよりもリスクが高そうな置換作業である。そんな冒険をするだろうか?
Oracle 11 の頃には、どのような表記になっているのか気になるところです。

参照: ANSI SQL外部結合とは

制限事項

FROM 句の結合構文を含む問合せには指定できない。

表、ビュー の列以外には指定できない。

外部結合した表を別の表と内部問合せに指定した場合、結合演算子(+)は無効 (内部結合に変換される)

A.COLa = B.Cola(+) AND B.COLa = C.COLa ⇒ A.COLa = B.Cola AND B.COLa = C.COLa

但し A.COLa = B.Cola(+) AND B.COLa = C.COLa(+) ならば書ける。

A.COLa ⇒ (+) B.COLa  ⇒ (+) C.COLa の関係

1つの表は、複数の表から (+)を指定することができない

(例)  A.COLa → (+) B.COLa (+) ← C.COLa の関係は記述できない。

OR を使用した他の結合条件を使用できない。(エラーになる)

(例)  A.Cola = B.Cola(+) OR A.Colb = B.Colb(+)

(+)演算子のついたカラムを副問い合わせで比較できない。

(例) COLa(+) = (SELECT 〜)

IN ()に、(+)演算子のついたカラムを指定できない

(例) COLa(+) IN ( … )

2つテーブルが複数の条件で結合される場合、そのすべてに記述が必要

(例) A.COLa = B.COLa(+) AND A.COLb = B.COLb(+)
  (※)  A.COLa = B.COLa(+) AND A.COLb = B.COLb にすると 内部結合の結果が戻る。

(+) 演算子は式には使用できない。列に指定する

(例) (誤) SUBSTR(COLa || Colb, 1, 2)(+) ⇒ (正) SUBSTR(COLa(+) || COlb(+), 1, 2)
 


外部結合演算子の制限事項の関連トピックス

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle Web セミナー