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, 開発メモ
-

関連記事

ORACLEのMERGE INTOで、UPDATEは出来るのに、INSERTできない

最近、Oracleのエラーの話しか書いてない気がするw     便利というか、トランザクション内の処理も1つで済むので、MERGE INTO文を使うことがあります。 実際、 新規デ …

[ORACLE]ORA-01950: 表領域’USERS’に対する権限がありません。のエラー対処法

  Oracle 12c R2(R1でも同様のエラーが発生)で ORA-01950: 表領域’USERS’に対する権限がありません のエラーが発生しました。 状況とし …

Oracleで複数レコードを更新する方法

UPDATE文で、複数のレコードを一回のトランザクション内で更新する必要に迫られました。 基本的に、今まで使ってきたUPDATE文では、 UPDATE tableA set COL1 = 1 ,COL …

[ORACLE]oracleのログの場所(リスナーログ、アラートログ)

ぶっちゃけ、ログの場所なんて普段意識してないわwww 存在は知ってるものの、ぶっちゃけ、普段からそんな場所など意識していたことがない。 もちろん、何かあったときは、ファイル検索で見つけりゃいいや~と思 …

ORACLEでCASE文を使用した時にORA-00932のエラーが出る

割と悩んだ・・・ 原因は、CASE文で使用している項目のデータ型が異なるのが原因みたいだけど、正直、ぴんと来てない現実w select case name when ‘A’ then ‘あ’ when …


カテゴリー