반응형
CASE문으로 쿼리를 작성하다가 오류가 발생했습니다.
원인
CASE문에서 THEN, ELSE 절의 반환되는 타입을 달라서입니다.
예시
SELECT
CASE
WHEN LENGTH(A.SEQ) <= 3 THEN A.SEQ -- NUMBER TYPE
ELSE SUBSTR(A.SEQ, -3) -- CHAR TYPE
END AS SEQ
FROM TEST_TABLE A
SEQ 컬럼은 NUMBER 타입입니다.
SEQ가 세 자리 이하이면 그대로 출력하고, 세 자리 이상이면 뒤의 세 자리만 출력하려고 했습니다.
그런데 THEN 절에서는 NUMBER 타입을 반환하고, ELSE 절에서는 CHAR 타입을 반환하였기 때문에
"ORA-00932: 일관성 없는 데이터 유형: NUMBER이(가) 필요하지만 CHAR임" 오류 메시지가 나왔습니다.
해결방법
CASE문에서 THEN, ELSE 절의 반환되는 타입을 같은 타입으로 맞춰줍니다.
SELECT
CASE
WHEN LENGTH(A.SEQ) <= 3 THEN TO_CHAR(A.SEQ) -- CHAR TYPE
ELSE SUBSTR(A.SEQ, -3) -- CHAR TYPE
END AS SEQ
FROM TEST_TABLE A
반응형
'오류 해결' 카테고리의 다른 글
[Oracle] ORA-01789: 질의 블록은 부정확한 수의 결과 열을 가지고 있습니다. (0) | 2024.11.20 |
---|---|
[Oracle] ORA-00972: 식별자의 길이가 너무 깁니다 (0) | 2023.07.25 |
[Java] 함수 호출 시 NullPointerException 발생 (0) | 2023.07.20 |
[Oracle] ORA-01830: 날짜 형식의 지정에 불필요한 데이터가 포함되어 있습니다 (0) | 2023.07.11 |
[Oracle] ORA-01861: 리터럴이 형식 문자열과 일치하지 않음 (0) | 2023.06.16 |
댓글