2013-06-09 2 views
1

를 가지고 :ORA-00932 일치하지 않는 데이터 유형은 예상 문자 숫자

ORA-00932 inconsistent datatypes expected char got number

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

내가 ELSE 상태에서 SUM을 제거 할 때 쿼리가 잘 작동>하지만 필요 예상 된 결과를 얻기 위해 텍스트를 합산하는 것.

+1

어떻게 텍스트 합계를 원하십니까? – gdoron

+0

가능한 복제본 [CASE 문과 DECODE 해당합니까?] (http://stackoverflow.com/questions/13712763/are-a-case-statement-and-a-decode-equivalent) – Ben

+1

허용되는 대답 (및 다른 하나는) 문제를 설명합니다. CASE의 then 문은 동일한 데이터 유형이어야합니다. – Ben

답변

2

CASE 문 must be the same datatype에서 문자 값과 모든 반환 값을 합칠 수 없습니다.

TO_CHAR()을 사용하여 SUM을 문자로 변환하면 올바르게 그룹화하지 않아도 여전히 작동하지 않습니다 (SQL Fiddle 참조).

가장 쉬운 방법은 'INVALID' 대신 0을 반환하고 케이스 문 전체를 합한 다음 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입니다.

0

글쎄, SUM 텍스트가 맞지 않습니까? 그것이 CASE에서 작업을 제거 할 때 잘 작동하는 이유입니다. 합계하려는 값에 to_number을 사용해 보셨습니까?

+0

CASE는 단 하나의 데이터 형식 만 반환해야하므로 [이 작동하지 않습니다.] (http://www.sqlfiddle.com/#!4/02f52/1) – Ben

관련 문제