ORA-00932: 数据类型不一致: 应为 CHAR 得到 NUMBER

ORA-00932: inconsistent datatypes: expected CHAR got NUMBER

逻辑

逻辑是,如果订单被取消,那么 return 0 否则 return 欠款价值 - 支付价值

小查询

CASE WHEN d.cancelled = 'TRUE' 
     THEN '0' 
     ELSE (to_char(b.owed)) - (to_char(d.paid)) 
     END AS balance,

获取错误

ORA-00932: inconsistent datatypes: expected CHAR got NUMBER 00932. 00000 - "inconsistent datatypes: expected %s got %s" *Cause:
*Action: Error at Line: 25 Column: 58

这个(to_char(b.owed)) - (to_char(d.paid))是一个数字,0是一个字符串。您应该删除 then 子句中的勾号或在 else 子句中添加 to_char:to_char((to_char(b.owed)) - (to_char(d.paid))) 或简单地 (b.owed - d.paid)

试试这个,你的案例应该 return number 或 varchar,现在你的案例 return '0' 作为 varchar,否则作为数字。两者都应该 return 一个 varchar 或两者都应该 return 一个数字。

当两者都return varchar

CASE WHEN d.cancelled = 'TRUE' 
     THEN '0' 
     ELSE to_char((to_char(b.owed)) - (to_char(d.paid)))
     END AS balance,

当两个return个数

CASE WHEN d.cancelled = 'TRUE' 
         THEN 0 
         ELSE (to_char(b.owed)) - (to_char(d.paid))
         END AS balance,

当两个return个数

CASE WHEN d.cancelled = 'TRUE' 
         THEN 0 
         ELSE (b.owed - d.paid)
         END AS balance,