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

投稿日:2017-06-06

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

select 
  case name
    when 'A' then 'あ'
    when 'B' then 1
  end

自分の環境では、こんな感じのSQLで発生した。

最終的に

select 
  case 
    when name = 'A' then 'あ'
    when name = 'B' then '1'
  end

こうやって、比較条件1個ずつ書くことに・・・

CASE文って、同じ比較のときはcase〜で記述しておけば、when以下で書かなくても良かったはずなんだけどね・・・

参考にしたページ。
SELECT CASE文を使用した際のORA-00932について
http://rjge.hatenablog.com/entry/20130729/1375094451







-ORACLE
-


  1. oracle beginner より:

    上記のパターンだと、
    select
    case name
    when ‘A’ then ‘あ’ //CHAR型
    when ‘B’ then 1 //NUMBER型
    end
    が原因のため、単純に
    select
    case name
    when ‘A’ then ‘あ’ //CHAR型
    when ‘B’ then ‘1’ //CHAR型
    end
    にしてあげれば単純CASE式で書けると思いますよ。

    • ht より:

      >oracle beginnerさん
      あー、確かに。
      当時の試したこととかまでは詳細には覚えてないですが、その書き方は試してなかったと思います。
      ありがとうございます。

comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

[Oracle]破棄されたオブジェクトにアクセスできません。 オブジェクト名 ‘oracleconnection’ です。

破棄されたオブジェクトにアクセスできません。 オブジェクト名 ‘oracleconnection’ です。 破棄されたオブジェクトかどうかの判断(MSDK) MSDNでも破棄さ …

[ORACLE]SQLのIN句にパラメータを適用する方法

カンマ区切りの文字列を取得した理由 こないだの続きです。 日本の中心付近で仕様変更と闘うSE日記[C#]リストをカンマ区切りの文字列で出力するhttp://ht-jp.net/blog/pc/c/c- …

Oracleで「Ora-28001:the password has expired」のエラーの対処法

正直、自分で見たときに何が起こったのかわかりませんでしたw だって、初めて見るエラーだったし・・・ ということで、調べてみたら、パスワードの有効期限らしいですね。 対処法も簡単なので、サクッと対処法を …

OracleDataaccessでどハマリして、勉強になったとかじゃなくお客さんに迷惑かけたし、もう穴を掘って埋まりたい

みんなは、どうやってOracleDataaccessを筆頭に、複数バージョンが入り乱れるDLLを管理してるのか教えてください。 マジで。

何度だって引っかかるORACLEのエラー・・・。ORA-01008:バインドされていない変数があります。

今日も今日とて、ORA-01008のエラーに悩まされる。 無慈悲に「バインドされていない変数があります。」ってメッセージは出してくれるんだけど、ビンゴの位置は教えてくれないわけで・・・ 何度目だろう・ …


カテゴリー