Pandora Pocket

IT系と日常系の備忘録。三日坊主。

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系サポートしてないみたいですね。

Pro*C でのJOINの使用について - ティップス

9iの頃から進化してないのか。
まぁ今どきPro*Cを使う人が少ないってことなんですかねぇ。