MERGE 문의 이해
- - MERGE문은 조건에 따라서 데이터의 삽입,갱신,삭제 작업을 한번에 할 수 있다.
- - 해당 행이 존재하는 경우 UPDATE(DELETE포함 할 수 있음)를 수행하고, 새로운 행일경우 INSERT를 수행한다.
- - 대상 테이블에 대한 UPDATE/INSERT 조건은 ON절에 의해 결정된다.
- - MERGE문에서 CLOB 사용시 업데이트 할 내용이 2000bytes가 넘을때 ORA-00600 오류가 발생하며, patch set 11.2.0.2 버전으로 해결할 수 있다.
MERGE INTO TB_S07_020AOGG010 m
USING ( select COMPANY,SEQ,CMX_EMPN,APPR_OBJECT_NAME,FULL_PATH from TB_S07_020NOGG010) e
ON ( m.SEQ = e.SEQ AND M.COMPANY = E.COMPANY)
WHEN MATCHED THEN
UPDATE SET m.CMX_EMPN=e.CMX_EMPN,m.APPR_OBJECT_NAME=e.APPR_OBJECT_NAME,m.FULL_PATH=e.FULL_PATH,m.LAST_UPDATE_TIMESTAMP=SYSDATE
WHEN NOT MATCHED THEN
INSERT (m.COMPANY,m.SEQ,m.CMX_EMPN,m.APPR_OBJECT_NAME,m.FULL_PATH,m.CREATION_TIMESTAMP,m.LAST_UPDATE_TIMESTAMP)
VALUES (e.COMPANY,e.SEQ,e.CMX_EMPN,e.APPR_OBJECT_NAME,e.FULL_PATH,sysdate,sysdate) ;
USING ( select COMPANY,SEQ,CMX_EMPN,APPR_OBJECT_NAME,FULL_PATH from TB_S07_020NOGG010) e
ON ( m.SEQ = e.SEQ AND M.COMPANY = E.COMPANY)
WHEN MATCHED THEN
UPDATE SET m.CMX_EMPN=e.CMX_EMPN,m.APPR_OBJECT_NAME=e.APPR_OBJECT_NAME,m.FULL_PATH=e.FULL_PATH,m.LAST_UPDATE_TIMESTAMP=SYSDATE
WHEN NOT MATCHED THEN
INSERT (m.COMPANY,m.SEQ,m.CMX_EMPN,m.APPR_OBJECT_NAME,m.FULL_PATH,m.CREATION_TIMESTAMP,m.LAST_UPDATE_TIMESTAMP)
VALUES (e.COMPANY,e.SEQ,e.CMX_EMPN,e.APPR_OBJECT_NAME,e.FULL_PATH,sysdate,sysdate) ;
'Dev. 데이터베이스 > SQL 예제' 카테고리의 다른 글
[oracle 예제] 함수(function) 생성 및 복수행 데이터 한 행 출력 예제 (0) | 2014.05.26 |
---|---|
[오라클 sql] oracle 정규식 실 사용 예제 - 업무내용 입력시 불필요 서식 삭제 (0) | 2014.02.12 |
[SQL 문제] 함수(FUNCTION) 통합 테스트 (0) | 2012.08.22 |
[SQL 문제] 집합함수, group by 이용 간단 테스트 예제 (0) | 2012.08.22 |
[SQL 문제] case when then 간단 테스트 예제 (1) | 2012.08.22 |