web-dev-qa-db-ja.com

Oracle SQL CASE WHEN ORA-00932:一貫性のないデータ型:予期されたCHARがNUMBER00932を取得しました。00000-「一貫性のないデータ型:期待された%sが%sを取得しました」

エラーが発生する

ORA-00932: inconsistent datatypes: expected CHAR got NUMBER 00932. 00000 - "inconsistent datatypes: expected %s got %s"

次のクエリを実行すると

SELECT distinct 
CASE when t.cancelled = 'TRUE' then '0' 
else t.amount END AMOUNT,
FROM table t

このように、else出力の数値またはテキストを使用して実行すると、機能します。

SELECT distinct 
CASE when t.cancelled = 'TRUE' then '0' 
else 'xxx' END AMOUNT,
FROM table t
4
Matt

使用する 0 の代わりに '0'。金額は数値であり、数値は引用符で囲まれていません。

SELECT distinct 
CASE when t.cancelled = 'TRUE' then 0 
else t.amount END AMOUNT,
FROM table t
6
radar

@RADARによる回答に加えて、

エラーの理由は、t.amountフィールドはNUMBERデータ型であり、stringではありません。

CASE式は、内部的にSTRINGNUMBERデータ型に適合させようとしています。

RADARの回答ですでに示唆されているように、文字列ではなく数値としてゼロを使用します。

2
Lalit Kumar B

私はここからこの問題の解決策を得ました[ https://stackoverflow.com/questions/29803977]

答えが述べたように:

Blockquote Oracleでは、CASE構造体で、すべてのTHEN式のタイプが最初のTHENの後の式のTYPEと一致している必要があるようです。型変換は実行されません。

これは短く、エラーの原因です。基本的に、最初のTHEN部分の後に言及する値のデータ型は、同じレベルの後続のすべてのTHENで同じである必要があります。

1

to_number(t.amount)を使用してみてください

SELECT distinct 
CASE when t.cancelled = 'TRUE' then 0 
else to_number(t.amount) END AMOUNT,
FROM table t
0
Shravan Kumar

文字列値を数値に変換できなかったため、 TO_CHAR 関数を使用して数値を文字列に変換しました。

0
Line