Notice
Recent Posts
Recent Comments
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Without haste, but without rest

5.7. MERGE, CASE, NULLIF, COALESCE 본문

삽질의 리포팅

5.7. MERGE, CASE, NULLIF, COALESCE

느린구름 2011. 8. 10. 21:43

오라클클럽 : http://oracleclub.com/lecture/1880

 

MERGE

  • 한 번에 조건에 따라 INSERT, UPDATE가 가능
  • 해당 ROW가 있으면 UPDATE, 없으면 INSERT 문장 실행

 

MERGE Syntax

MERGE INTO target_table_name

    USING (table|view|subquery) ON (join condition)

WHEN MATCHED THEN

    UPDATE SET col1 = val1[, col2 = val2..]

WHEN NOT MATCHED THEN

    INSERT(….) VALUES(…)

 

  • INTO : DATA가 UPDATE되거나 INSERT 될 TABLE이름 지정
  • USING : 대상 TABLE의 DATA와 비교한 후 UPDATE 또는 INSERT 할 대상이 되는 DATA의 SOURCE테이블 또는 뷰 지정
  • ON : UPDATE나 INSERT를 하게 될 조건으로 , 해당 조건을 만족하는 DATA가 있으면 WHEN MATCHED절 실행
  • 없으면 WHEN NOT MATCHED 이하를 실행
  • WHEN MATCHED : ON조건절이 TRUE인 ROW에 수행할 내용
  • WHEN NOT MATCHED : ON 조건절에 맞는 ROW없을 때 수행할 내용

 

MERGE예제

MERGE INTO emp_test et

USING emp e ON (et.empno = e.empno)

WHEN MATCHED THEN

    UPDATE SET et.sal = e.sal*1.1

WHEN NOT MATCHED THEN

    INSERT VALUES (e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, e.deptno)

 

CASE문장

  • DECODE함수과 유사
  • IF..THEN..ELSE구문과 유사, WHEN절 다음에 여러 조건 올 수 있음

INSERT INTO raise

SELECT last_name,

    CASE

     WHEN job_id LIKE 'AD%' THEN '10%'

     WHEN job_id LIKE 'IT%' THEN '15%'    

WHEN job_id LIKE 'PU%' THEN '18%'

    END

FROM employees;

 

NULLIF

  • NULLIF(exp1, exp2)
  • exp1값과 exp2값이 동일하면 NULL을 그렇지 않으면 exp1을 반환
  • CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

 

COALESCE

  • COALESCE(expr1, expr2, expr3…)
  • expr1이 NULL이 아니면 expr1값을 그렇지 않으면 COALESCE(expr2, expr3,…)값을 반환
  • NVL함수와 비슷