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