Oracleで「ORA-00918: 列の定義が不明瞭です 」のエラーの解決法と発生理由

投稿日:

発生したエラー

ORA-00918: 列の定義が不明瞭です

原因

原因は、同じ列名やテーブルの別名を使用していること。

解決方法

  1. Select句で羅列している列に同一の列名(別テーブル)があれば、as句を使って別名を定義
  2. Select句でas句で重複している列名があれば、修正
  3. From句でJOINしているテーブルの別名が重複していれば、修正

多分、この順番で見ていけば解決できる。

エラーが発生した理由

通常、デザイナとかクエリウィザードみたいなのを使ってSQLを作成する場合は、発生しないエラーかと。
重複する列名などは自動で数字を付与したりして、ダブらないようにしてくれてますし。

普段は、デザイナ経由でSQLを作成している自分がなぜこのエラーにぶち当たったのかというと、既存SQLの修正でした。

バージョン管理が影響していた

弊社では、SVNを使用したソースのバージョン管理をしています。
これがトリガーでした・・・

  • Ver1:自分が修正を行ったもの
  • Ver2:Ver1の修正を反映させたもの

エラーが発生したのは、Ver2でした。
Ver2にSQLなどを移植し、実行確認の際に「ORA-00918: 列の定義が不明瞭です 」のエラーが発生しました。

当然ながら、Ver1に対してテストを行い、エラーが発生しない状態まで保障しています。
その後、Ver2に修正を反映させるわけですが、反映させたSQL部分に別の人の修正が先に適用されていました。

不幸にも別の修正で自分が追加したテーブルが被る結果に・・・
社内ルールのせいで、使用する別名も同一。

で、エラーになりましたとさw

 
早い者勝ちかよ・・・







-ORACLE, 開発メモ
-

関連記事

[C#]DateTimePickerは、CloseUpイベントで日付変更を取得する

日付関連で、取得した値がどうか?ってのを検出して判定する必要が出たのでメモ。 CloseUpイベントで何が判定されるのか? https://msdn.microsoft.com/ja-jp/libra …

WindowsのコマンドプロンプトでUnicodeを扱おうとして挫折した。

WindowsのコマンドプロンプトでUnicodeのファイル名を扱うためのバッチファイルをどうたらこうたら。 http://daily-misc.blogspot.jp/2014/12/windows …

no image

C#で正規表現が使えたらな〜って時は以外と多いので、ちょっと正規表現を頑張って使ってみた。

あー、正規表現が使えたらな〜って時は以外と多いので、ちょっと正規表現を頑張って使ってみた。 別にC#に限らないんだけど、ソースの中に正規表現を書く時の書き方?っていうのかな。が分からなかったので、調べ …

DLLのプロパティのブロック解除をして、ダウンロードしたプログラムを起動出来るようにする

よくありますよね・・・ いや、普通は無いかも・・・ 今、開発中のプログラムなんですが、正式なビルドはサーバーで実行してる訳です。 で、各自がアップロードされたEXE等をDLして最新の実行環境としてる。 …

[C#]文字を繰り返したものを取得したい。

いちいちfor文とかで繰り返すのも効率が悪いなと思ってたので、処理を関数化・・・ ただ、共通関数として登録しないので、別のところで使いたい場合は、同じ関数が複数登録されちゃうことに・・・ 更には、思い …


カテゴリー