ORA-00932:不一致的数据类型:预期CHAR得到NUMBER

时间:2015-01-06 15:45:37

标签: sql oracle oracle-sqldeveloper

逻辑

逻辑是如果订单被取消然后返回0,否则返回欠款值 - 付款值

小查询

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

获取错误

  

ORA-00932:不一致的数据类型:预期CHAR得到NUMBER   00932. 00000 - “不一致的数据类型:预期%s获得%s”   *原因:
  *行动:   行错误:25列:58

2 个答案:

答案 0 :(得分:4)

试试这个,你的情况应该返回数字或varchar,现在你的情况返回' 0'作为varchar,否则作为数字。两者都应该返回一个varchar,或者两者都应该返回一个数字。

当两者都返回varchar

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

OR

当两者都返回

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

OR

当两者都返回

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

答案 1 :(得分:1)

(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)