공부/sql

오라클 MERGE INTO

hansuya 2025. 5. 26. 09:34

오라클에서 쿼리문을 작성하다보면 하나의 쿼리문으로 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