発生したエラー
ORA-00918: 列の定義が不明瞭です
原因
原因は、同じ列名やテーブルの別名を使用していること。
解決方法
- Select句で羅列している列に同一の列名(別テーブル)があれば、as句を使って別名を定義
- Select句でas句で重複している列名があれば、修正
- From句でJOINしているテーブルの別名が重複していれば、修正
多分、この順番で見ていけば解決できる。
エラーが発生した理由
通常、デザイナとかクエリウィザードみたいなのを使ってSQLを作成する場合は、発生しないエラーかと。
重複する列名などは自動で数字を付与したりして、ダブらないようにしてくれてますし。
普段は、デザイナ経由でSQLを作成している自分がなぜこのエラーにぶち当たったのかというと、既存SQLの修正でした。
バージョン管理が影響していた
弊社では、SVNを使用したソースのバージョン管理をしています。
これがトリガーでした・・・
- Ver1:自分が修正を行ったもの
- Ver2:Ver1の修正を反映させたもの
エラーが発生したのは、Ver2でした。
Ver2にSQLなどを移植し、実行確認の際に「ORA-00918: 列の定義が不明瞭です 」のエラーが発生しました。
当然ながら、Ver1に対してテストを行い、エラーが発生しない状態まで保障しています。
その後、Ver2に修正を反映させるわけですが、反映させたSQL部分に別の人の修正が先に適用されていました。
不幸にも別の修正で自分が追加したテーブルが被る結果に・・・
社内ルールのせいで、使用する別名も同一。
で、エラーになりましたとさw
早い者勝ちかよ・・・