영문을 알수 없는 decode 입니다. 0 4 3,109

by 배기염 [SQL Query] decode [2012.12.20 12:08:20]


안녕하십니까. 아래와 같은 업데이트 문으로 examinformation이라는 테이블에 업데이트 하는 문입니다.
set 중간부분 보시면 qc_confirm_datetime에 넣는 부분이 있습니다.
ex) 2012-11-12 12:12:24의 형식인 DATE 인데요.
decode해서 pa_inbound_type이 113일때 v_ex를 rowtypes으로 선언해서 기존 테이블 값을 넣어두어서
기존에 저장된 시간(Ex)을 테이블에 업데이트 시키게 되는데
시간은 오지않고 날짜만 넘어옵니다.

그런데 decode를 빼고 qc_confirm_datetime = v_ex.qc_confirm_datetime 하면 시간까지 같이 넘어옵니다.
이건 어떤 현상입니까?
Toad에서 디버깅하면 정상적으로 시간까지 넘어오는데
c# .net에서 프로시져 호출해서 하게 되면 시간없이 날짜만 넘어옵니다..
원인을 알수가 없어서 답답합니다.


update examinformation e
      set e.load_type       = pa_load_type,
        e.qc_confirm_datetime  = decode(pa_inbound_type, 112, null, 113, v_ex.qc_confirm_datetime),
        e.qc_user_id      = decode(pa_inbound_type, 112, null, 113, v_ex.qc_user_id)
     where e.lot_no        = pa_lot_no
      and e.request_date     = pa_request_date
      and e.pallet_id       = pa_pallet_id; 


by 제로 [2012.12.20 12:34:21]
decode 함수는 세번째 인수의 데이터형과 동일한 데이터형으로 반환합니다.
즉, 위에서와 같이 세번째 인수가 null 이므로 반환값은 varchar2가 되구요...
Data 형으로 반환하려면 아래와 같이 바꿔주면 될것 같네요.
decode(pa_inbound_type, 113, v_ex.qc_confirm_datetime, 112, null)

by 배기염 [2012.12.20 13:24:39]

그렇게 바꾸고 나니 되는 군요...
허나.. 그럼 토드에서 디버깅 할때 된 이유는 무엇인가요?
스마트하게 토드가 알아서 변환해준건가요?

by 제로 [2012.12.20 13:39:54]
글쎄요.. 그 부분까지는 잘 모르겠네요..;

by 배기염 [2012.12.20 13:45:57]
아무쪼록 도움을 주셔서 감사합니다. 자동형변환이 되서 그런게 아닐까 추측은 해보지만..
decode가 첫번째 리턴 데이터형을 그대로 가져 간단걸 먼저 알았어야 할 부분이었군요.

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