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