Oracle Pro*CではJOIN句が使えない
仕事でPro*Cを利用したアプリケーションを作ることがあるんですが、その時ハマったことがあったので備忘録。
下記のようなSQLでPro*Cがエラーを吐きます。
SELECT *
FROM DB_A
INNER JOIN DB_B
ON DB_A.DATA = DB_B.DATA
以下がエラーメッセージ
行、列でエラーが発生しました。
INNER JOIN DB_B
PCC-S-02201,記号"JOIN"が見つかりました。次のうちの1つが入るとき:
(後略)
以下の書き方ならちゃんとエラーなくビルドが通ります。 (むしろこれが通らなかったらおかしい)
SELECT *
FROM DB_A, DB_B
WHERE DB_A.DATA = DB_B.DATA
また、外部結合でもうまくいきません。
SELECT *
FROM DB_A
LEFT OUTER JOIN DB_B
ON DB_A.DATA = DB_B.DATA
エラーメッセージ:
行、列でエラーが発生しました。
INNER JOIN DB_B
PCC-S-02201,記号"OUTER"が見つかりました。次のうちの1つが入るとき:
(後略)
こちらはOracle独自表記の(+)を使えばビルドが通ります。
SELECT *
FROM DB_A, DB_B
WHERE
DB_A.DATA = DB_B.DATA(+)
どうもPro*CのプリコンパイラはJOIN系サポートしてないみたいですね。
9iの頃から進化してないのか。
まぁ今どきPro*Cを使う人が少ないってことなんですかねぇ。