- 문법
MERGE INTO table_name alias
USING (table|view|subquery) alias
ON (join condition)
WHEN MATCHED THEN
UPDATE SET col1 = val1[, col2 = val2…]
WHEN NOT MATCHED THEN
INSERT (컬럼리스트) VALUES (값들....);
MERGE는 UPDATE와 INSERT를 결합한 문장으로 각각의 쓰임새는 다음과 같다.
INTO clause : data가 update 되거나 insert될 table 이름
USING clause : 대상 table의 data와 비교한 후 update 또는 insert할 때 사용할 data의 source.
ON clause : update나 insert를 하게 될 condition으로, 해당 condition을 만족하는 row가 있으면 WHEN MATCHED 이하를 실행하게 되고, 없으면 WHEN NOT MATCHED 이하를 실행하게 된다.
WHEN MATCHED : ON clause의 조건이 TRUE인 row에 수행할 내용
WHEN NOT MATCHED : ON clause의 조건에 맞는 row가 없을 때 수행할 내용
--------------------------------------------- 예
SQL> create table emp_history (
2 empno number(4) not null primary key,
3 mydate date,
4 salary number(7,2));
테이블이 생성되었습니다.
SQL> MERGE INTO emp_history eh
2 USING emp e
3 ON (e.empno = eh.empno)
4 WHEN MATCHED THEN
5 UPDATE SET eh.salary = e.sal
6 WHEN NOT MATCHED THEN
7 INSERT VALUES (e.empno, sysdate, sal);
14 행이 병합되었습니다.
SQL> commit;
커밋이 완료되었습니다.
SQL> select * from emp_history;
EMPNO MYDATE SALARY
---------- -------- ----------
7844 04/01/06 1500
7839 04/01/06
7782 04/01/06 2450
7521 04/01/06 1250
7654 04/01/06 1250
7788 04/01/06 3000
7698 04/01/06 2850
7566 04/01/06 2975
7499 04/01/06 1600
7934 04/01/06 1300
7902 04/01/06 3000
7369 04/01/06 800
7876 04/01/06 1100
7900 04/01/06 950
14 개의 행이 선택되었습니다.
MERGE INTO table_name alias
USING (table|view|subquery) alias
ON (join condition)
WHEN MATCHED THEN
UPDATE SET col1 = val1[, col2 = val2…]
WHEN NOT MATCHED THEN
INSERT (컬럼리스트) VALUES (값들....);
MERGE는 UPDATE와 INSERT를 결합한 문장으로 각각의 쓰임새는 다음과 같다.
INTO clause : data가 update 되거나 insert될 table 이름
USING clause : 대상 table의 data와 비교한 후 update 또는 insert할 때 사용할 data의 source.
ON clause : update나 insert를 하게 될 condition으로, 해당 condition을 만족하는 row가 있으면 WHEN MATCHED 이하를 실행하게 되고, 없으면 WHEN NOT MATCHED 이하를 실행하게 된다.
WHEN MATCHED : ON clause의 조건이 TRUE인 row에 수행할 내용
WHEN NOT MATCHED : ON clause의 조건에 맞는 row가 없을 때 수행할 내용
--------------------------------------------- 예
SQL> create table emp_history (
2 empno number(4) not null primary key,
3 mydate date,
4 salary number(7,2));
테이블이 생성되었습니다.
SQL> MERGE INTO emp_history eh
2 USING emp e
3 ON (e.empno = eh.empno)
4 WHEN MATCHED THEN
5 UPDATE SET eh.salary = e.sal
6 WHEN NOT MATCHED THEN
7 INSERT VALUES (e.empno, sysdate, sal);
14 행이 병합되었습니다.
SQL> commit;
커밋이 완료되었습니다.
SQL> select * from emp_history;
EMPNO MYDATE SALARY
---------- -------- ----------
7844 04/01/06 1500
7839 04/01/06
7782 04/01/06 2450
7521 04/01/06 1250
7654 04/01/06 1250
7788 04/01/06 3000
7698 04/01/06 2850
7566 04/01/06 2975
7499 04/01/06 1600
7934 04/01/06 1300
7902 04/01/06 3000
7369 04/01/06 800
7876 04/01/06 1100
7900 04/01/06 950
14 개의 행이 선택되었습니다.
'DataBase > Oracle' 카테고리의 다른 글
LOCK 문제 확인과 해결 방법 (0) | 2008.04.28 |
---|---|
데이터사전 정보조회 (0) | 2008.04.28 |
실행계획 해석하기(1) (0) | 2008.04.28 |
실행계획 해석하기(Nested Loops Join) (0) | 2008.04.28 |
실행계획 SQL 연산(CONCATENATION) (0) | 2008.04.28 |