Without haste, but without rest
5.7. MERGE, CASE, NULLIF, COALESCE 본문
오라클클럽 : 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함수와 비슷