본문 바로가기

DB/Oracle

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

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 를 넣어주어야 한다는 것..
그렇지 않으면.. 내부 조건식에 걸리는 항목을 제외한 나머지 목록은 모두 널이 되어 업데이트가 수행되지 않는다.

'DB > Oracle' 카테고리의 다른 글

SQL trace, TKPROF 분석하기 : Tracing SQL statement execution  (1) 2009.12.01
GROUP BY 와 ORDER BY 최적화 (오라클 10.2 이후버젼)  (2) 2009.11.27
Oracle 랜덤하게 Row 뽑기  (0) 2009.01.23
ORACLE > TRANSLATE  (0) 2008.11.25
SQL Loader  (1) 2008.09.17