ORA-00932不一致的数据类型预期char得到的数字

时间:2013-06-09 23:05:53

标签: sql oracle

当我尝试执行下面的查询时,我收到错误:

  

ORA-00932不一致的数据类型预期char得到数字

select (case when upper (TEXT) <> lower (TEXT) then 'INVALID'
             else sum(TEXT)
        end) 
  from CLASS 
 where SECTION = 'SEVENTH' 

当我在ELSE条件中删除SUM时查询工作正常&gt;但我需要SUM文本以达到预期的结果。

2 个答案:

答案 0 :(得分:2)

您无法在CASE语句must be the same datatype中对字符值和所有返回值求和。

如果您使用TO_CHAR()将SUM转换为字符,那么由于您未正确分组,这仍然无法正常工作,请参阅此SQL Fiddle

最简单的方法是返回0而不是'INVALID',对整个case语句求和,如果它为0,则将其更改回'INVALID'。&#39 ;不完全一样......不要在字符列中存储数字?

select case when a = 0 then 'INVALID'
            else to_char(a)
       end
  from ( select sum( case when upper(txt) <> lower(txt) then 0
                          else to_number(txt)
                     end ) as a
           from class )

这里有SQL Fiddle来演示。

答案 1 :(得分:0)

嗯,你不能SUM发短信,对吗?这就是当你从CASE中删除操作时它运行良好的原因。您是否尝试对要求求和的值使用to_number