오라클에서 쿼리문을 작성하다보면 하나의 쿼리문으로 insert, update, delete 작업을 해야 하는 경우가 있다. 이럴 때 merge 문을 사용하면 간단하게 쿼리문을 작성할 수 있다. 오라클 9i부터 merge문을 사용할 수 있으며, delete 절은 10g부터 사용할 수 있다
merge
into job_history a {테이블 | 뷰}
using emp b {테이블 | 뷰 | 서브쿼리}
on (a.empno = b.empno) 조건절
when matched then 일치하는 경우 {update | delete|
update set a.job = b.job
delete
when not matched then 불일치하는 경우 insert
insert (a.empno, a.job, a.deptno)
values(b.empno, b.job, b.deptno)
;
>>>
merge into job_history a
using emp b
on(a.empno = 7788 and a.empno = b.empno)
when matched then
update
set a.job = b.job
,a.deptno = b.deptno
when not matched then
insert(a.empno, a.job, a.deptno)
values(b.empno, b.job, b.deptno)
;
단일 테이블 사용법(dual)
-- 7788이 있으면 업데이트하고 없으면 인서트한다
merge into emp a
using dual
on(a.empno = 7788)
when matched then
update
set a.deptno = 20
when not matched then
insert(a.empno, a.ename, a.deptno)
values(7788, 'SCOTT', 20)
;
'공부 > sql' 카테고리의 다른 글
| 트랜잭션 (0) | 2025.05.27 |
|---|---|
| Interval 이란? (0) | 2025.05.27 |
| START WITH ... CONNECT BY 절을 사용한 계층형 쿼리 (0) | 2025.05.26 |
| 오라클 SYS_CONNECT_BY_PATH(여러 ROW를 한 칼럼으로) (0) | 2025.05.26 |
| 조인 (0) | 2025.05.08 |