update 절 .. 0 2 1,474

by 차차 [Oracle 기초] [2017.05.15 15:56:04]


UPDATE  TB_QUIZ_EMP
    SET  ISU_FLAG    = (CASE WHEN EXC_CODE = 'QU01' THEN 'SU_RY' ELSE 'EDURN' END)  --> 통과여부
        ,EXC_CODE    = 'QU01' --> 통과사유
    	,TARGET_YN   = 'Y'
  WHERE  START_DATE  = '20170511'
    AND  QUIZ_CD   = 'EDU22'
    AND  USERID      = '20040307'

 

안녕하세요 UPDATE  문에 궁금증이 생겨 질문을 남깁니다.

현재 저 쿼리로 UPDATE를 진행중입니다.

EXC_CODE 가 QU01 이란 코드를 받아오고

ISU_FLAG 에서 EXC_CODE 가 QU01 이면 결과가 통과로 변경 되게끔 할려고 하는데

문제가 QU01 코드가 아닌 다른 코드가 나왔을때도 똑같이 UPDATE가 되며 UPDATE문을 두번을 돌려야 정상적으로 수정이 되네요..

인원들의 통과사유값은 기본 NULL인 상태입니다.

어떻게 수정을 해야할까요?

by 마농 [2017.05.15 16:30:33]

쿼리에서 사용된 'QU01' 부분이 상수값 그대로 인 경우와
변수를 사용한 것인데 상수로 잘못 표시한 경우.
두가지 경우로 셍각해 보면
1. 상수값인 경우
  - 어차피 ISU_FLAG 도 상수값인 'SU_RY' 로 입력하면 됨
2. 변수 값인 경우
  - case 의 조건절에 EXC_CODE 로 비교하는 대신 해당 입력변수를 사용해야죠.
  - SET isu_flag = CASE WHEN :v_exc_code = 'QU01' THEN 'SU_RY' ELSE 'EDURN' END
      , exc_code = :v_exc_code


by 차차 [2017.05.16 08:39:03]

변수값으로 받는 경우였는데 잘 해결하였습니다.

덕분에 정말 많이 배우고 갑니다.

 

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