DB/Oracle

테이블 데이터세트 업데이트 수행

neokido 2009. 4. 27. 23:16
UPDATE KETD13MT A SET(SALSTATCD, DISPFL)=(
 SELECT
  (
   CASE NVL(PRDSTATCD, '05')
    WHEN '01' THEN 'PS02' --// 준비중 상품
    WHEN '02' THEN 'PS01' --// 신상품
    WHEN '03' THEN 'PS01' --// 정상판매상품
    WHEN '04' THEN 'PS03' --// 일시품절 상품
    ELSE 'PS04'     --// 05=> 폐종상품
   END
  ) AS PRDSTATCD
  , DECODE(PRDSTATCD, '05', 'N', PRDDISPFL) PRDDISPFL
 FROM WETH01MT B
 WHERE B.PRDFORMCD IN ('01', '03')
  AND A.ORDPRDID=B.PRDCD      
)
WHERE EXISTS (SELECT 1 FROM WETH01MT B WHERE A.ORDPRDID=B.PRDCD AND B.PRDFORMCD IN ('01', '03')) 


여기서 주의할것은 반드시 update 조건절에 exists 를 넣어주어야 한다는 것..
그렇지 않으면.. 내부 조건식에 걸리는 항목을 제외한 나머지 목록은 모두 널이 되어 업데이트가 수행되지 않는다.