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のエラー・・・。ORA-01008:バインドされていない変数があります。

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

no image

OracleでLISTAGG関数を使ったら、世界が変わった話。

11gR2からGROUP_CONCAT(複数行をまとめて1列に)が可能に http://d.hatena.ne.jp/kkz_tech/20150311/1426048592 日本の中心付近で仕様変更 …

[C#]リストをカンマ区切りの文字列で出力する

リストの項目をカンマ区切りで出力したい 卵が先か鶏が先か~って話じゃないんですが、リストで出力した内容をカンマ区切りのデータにする必要が出てきたので、調べました。 List<string> …

[Oracle]regexp_replaceで、改行コード・タブとかのCSV出力時に邪魔になるものを消す

通常、スペースを消したい時とかなら、replaceとかtrimとかで一括で処理してたんだけど、CSVに出力したい時に、複数の処理を纏めるのがスゲェ面倒くさかった。 それがregexp_replaceで …

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

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


カテゴリー