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

Posted

技术标签:

【中文标题】ORA-00932不一致的数据类型预期 char 得到数字【英文标题】:ORA-00932 inconsistent datatypes expected char got number 【发布时间】:2013-06-09 23:05:52 【问题描述】:

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

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

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

当我在 ELSE 条件下删除 SUM 时查询工作正常> 但我需要对文本求和才能达到预期的结果。

【问题讨论】:

你想如何对文本求和...? Are a CASE statement and a DECODE equivalent? 的可能重复项 接受的答案(和另一个)解释了问题。 CASE 中的 then 语句必须是相同的数据类型。 您似乎正在通过测试upper(text) = lower(text) 来测试text 是否为数字。这并不是万无一失的。如果其中可能同时包含数字值和非数字值,则还需要 GROUP BY 一个值。你最好向我们展示你期望的数据和输出。 【参考方案1】:

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

如果您使用 TO_CHAR() 将 SUM 转换为字符,这仍然无法正常工作,因为您没有正确分组,请参阅SQL Fiddle。

执行此操作的最简单方法是返回 0 而不是 'INVALID',对整个 case 语句求和,如果为 0,则将其更改回 'INVALID'。这不太一样...不要在字符列中存储数字?

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 来演示。

【讨论】:

【参考方案2】:

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

【讨论】:

This will not work 作为 CASE 只需要返回一种数据类型。

以上是关于ORA-00932不一致的数据类型预期 char 得到数字的主要内容,如果未能解决你的问题,请参考以下文章

无法选择 *(ORA-00932:不一致的数据类型:预期的 CHAR 得到了 ADT)

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

ORA-00932:不一致的数据类型:预期CHAR在为日期添加1时获得NUMBER

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

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

如何修复 PL/SQL:ORA-00932:不一致的数据类型:预期的 CLOB 得到了 -