ORA-01841 오류입니다. - 검색을 하였지만 비슷한 경우를 보지 못하여. 2

by PIANO [2010.03.11 15:49:37]



안녕하세요.

좀 이해가 안되는 경우가 있어서 이렇게 문의 드립니다.
오라클 버전은 ORA8i 입니다. (좀 회사가 구식이라....)
테이블은 ABC 이고  BuyDt , GainOcurEndDt둘다 char 8 자리입니다. default 로 '' 이고요..
현재 BuyDt라는 컬럼에는 NULL값이 들어가 있습니다. GainOcurEndDt이컬럼은 값이 들어가 있고요..

0) 8 버전이라 ..NVL2함수 테스트
SELECT NVL2(LTRIM(RTRIM(A.BuyDt))  , 'AAA', 'BBB')
FROM ABC A
WHERE A.GjNo   = '00101118476'
    AND A.PayDt  = '20010818' 

결과) BBB

1)
SELECT NVL2(LTRIM(RTRIM(A.GainOcurEndDt)) ,to_char(to_date(A.GainOcurEndDt),'yyyy/mm/dd') , ' ')
   FROM ABC A
  WHERE A.GjNo   = '00101118476'
    AND A.PayDt  = '20010818' 

결과) 2001/06/10

2)
 SELECT NVL2(LTRIM(RTRIM(A.BuyDt)) ,to_char(to_date(A.BuyDt),'yyyy/mm/dd') , ' ')
   FROM ABC A
  WHERE A.GjNo   = '00101118476'
    AND A.PayDt  = '20010818' 

결과 ORA-01841 에러를 빵 띠웁니다.


2번 같은 경우 그 이류를 모르겠습니다.
고수님들 가르쳐 주시면 감사하겠습니다.
by proud [2010.03.11 16:09:24]
답변이라기보단 같은 에러가 날 수 있는 케이스입니다.

select nvl2(ltrim(rtrim(' ')),to_char(to_date(' '),'yyyy/mm/dd'),' ') from dual

처럼 해당 컬럼에 스페이스가 있다면 같은 에러가 나는군요.

만약 위의 케이스라면 아래처럼 바꾼다면 해결 가능하리라 생각됩니다.

select nvl2(ltrim(rtrim(' ')),to_char(to_date(ltrim(rtrim(' '))),'yyyy/mm/dd'),' ') from dual

by PIANO [2010.03.11 16:27:52]
널값이 아니라 스페이스 군요..
length 함수를 한결과 8로 나옵니다.
아 nvl2 함수를 사용하지 않아도..

to_char(to_date( ltrim(rtrim (컬럼))),'yyyy/mm/dd') 이런식으로 하니 값이 있을 경우만 날짜 타입 처리 합니다. ..
감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입