外部結合演算子 (+) の制限事項
便利な外部結合演算子 (+) であるが、以下の制限事項があるため該当する場合は 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)