티스토리 뷰

■ 에러

ORA-00932 : 일관성 없는 데이터유형 : -이(가) 필요하지만 -임

※-에는 데이터형이 들어간다. Ex) CHAR이(가) 필요하지만 DATE

 

<에러가 발생한 SQL문>

SELECT         
	ITEM_NO,         
	ITEM_ID,         
	(CASE WHEN SUBSTR(ITEM_ID, 0, 1) = 9 THEN ''      -- 공백으로 추출(CHAR)
   	      WHEN ITEM_KBN <> '2' THEN ''              -- 공백으로 추출(CHAR)
	      ELSE TO_DATE(START_DATE, 'YYYY/MM/DD')    -- 시작날짜로 추출(DATE
	END) START_DATE    
FROM      
        CC_HELPER_INFO_RIREKI_PA_TBL    
WHERE          
        TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM/DD')) BETWEEN TO_DATE(START_DATE) AND TO_DATE(DECODE(END_DATE,'0','99991231', '99999999','99991231', END_DATE)

 

■ 원인

CASE문에서의 첫번째, 두번째의 조건에서 공백으로 추출하기 때문에 이 두개는 CHAR형으로 반환하고 있지만,  

마지막 ELSE조건에서 시작날짜를 TO_DATE로 변환하여 추출하려고 하고있기 때문.

즉, 타입이 맞지 않아서 난 에러이다.

 

■ 대응방법

이 경우에는 셋 다 공통된 데이터형으로 반환을 하도록 수정해야한다.

마지막 ELSE 조건을 TO_CHAR 함수를 이용하여 날짜형 데이터를 문자형 데이터로 변환하여 추출하도록 하면 된다.

 

<수정 후의 SQL문>

SELECT         
	ITEM_NO,         
	ITEM_ID,         
	(CASE WHEN SUBSTR(ITEM_ID, 0, 1) = 9 THEN ''            
   	      WHEN ITEM_KBN <> '2' THEN ''               
	      ELSE TO_CHAR(TO_DATE(START_DATE), 'YYYY/MM/DD')          
	END) START_DATE    
FROM      
        CC_HELPER_INFO_RIREKI_PA_TBL    
WHERE          
        TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM/DD')) BETWEEN TO_DATE(START_DATE) AND TO_DATE(DECODE(END_DATE,'0','99991231', '99999999','99991231', END_DATE)

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함