MERGE, CASE, NULLIF, COALESCE
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 예제
-- scott유저로 접속C:\> SQLPLUS scott/tiger -- 테스트를 위한 테이블 생성-- 부서번호가 10인 사원의 데이터 생성.SQL> CREATE TABLE emp_test AS SELECT * FROM emp WHERE deptno = 10; SQL> SELECT empno, ename, sal FROM emp_testEMPNO ENAME SAL----- ---------- ----- 7782 CLARK 2450 7839 KING 5000 7934 MILLER 1300 -- emp_test테이블에 데이터가 있으면 급여를 10%인상하고 -- 없으면 새로 INSERT하는 예제.SQL> 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)14 행이 병합되었습니다. -- 실행결과 조회.SQL> SELECT empno, ename, sal FROM emp_testEMPNO ENAME SAL----- ---------- ----- 7782 CLARK 2695 7839 KING 5500 7934 MILLER 1430 7844 TURNER 1500 ...14 개의 행이 선택되었습니다.
CASE 문장
Simple CASE expression
DECODE 함수와 비슷하다
SQL> SELECT deptno, CASE deptno WHEN 10 THEN 'ACCOUNTING' WHEN 20 THEN 'RESEARCH' WHEN 30 THEN 'SALES' ELSE 'OPERATIONS' END as "Dept Name" FROM emp;
Searched CASE expression
IF.. THEN .. ELSE 구문과 비슷 하다. WHEN절 다음에 여러 조건이 올 수 있다.
SQL> 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%' ELSE '20%' 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 함수와 비슷하다.
-- 아래 문장을 실행해 보자.SQL> SELECT COALESCE(comm,1) FROM emp;
문서에 대하여
- - 작성자 : 김정식 (oramaster _at_ naver.com)
- - 작성일 : 2006-02-12
- - 강좌 URL : http://www.oracleclub.com/lecture/1880



덧글