エラーが発生する
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
使用する 0
の代わりに '0'
。金額は数値であり、数値は引用符で囲まれていません。
SELECT distinct
CASE when t.cancelled = 'TRUE' then 0
else t.amount END AMOUNT,
FROM table t
@RADARによる回答に加えて、
エラーの理由は、t.amount
フィールドはNUMBER
データ型であり、string
ではありません。
CASE
式は、内部的にSTRING
をNUMBER
データ型に適合させようとしています。
RADARの回答ですでに示唆されているように、文字列ではなく数値としてゼロを使用します。
私はここからこの問題の解決策を得ました[ https://stackoverflow.com/questions/29803977]
答えが述べたように:
Blockquote Oracleでは、CASE構造体で、すべてのTHEN式のタイプが最初のTHENの後の式のTYPEと一致している必要があるようです。型変換は実行されません。
これは短く、エラーの原因です。基本的に、最初のTHEN部分の後に言及する値のデータ型は、同じレベルの後続のすべてのTHENで同じである必要があります。
to_number(t.amount)
を使用してみてください
SELECT distinct
CASE when t.cancelled = 'TRUE' then 0
else to_number(t.amount) END AMOUNT,
FROM table t
文字列値を数値に変換できなかったため、 TO_CHAR 関数を使用して数値を文字列に変換しました。