Pandora Pocket

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

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

http://www016.upp.so-net.ne.jp/louvre/tips/engineering/software/oracle/procjoin.html

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