仕事で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を使う人が少ないってことなんですかねぇ。