💾DB
[ORACLE] MERGE INTO
이줭
2023. 7. 13. 15:02
728x90
쿼리를 작성하다보면 하나의 쿼리문으로 INSERT, UPDATE, DELETE 작업을 해야 하는 경우가 있다. 이런 경우 MERGE 문을 사용하여 간단하게 쿼리를 작성할 수 있다.
MERGE 문은 ORACLE 9i 부터 지원하고, MERGE문에 DELETE 절은 10g부터 지원한다.
단일테이블
단일테이블에 MERGE문을 사용하기 위해서는 USING 절에 테이블 대신 DUAL을 사용하면 된다.
MERGE INTO EMP
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);
JOIN 사용
MERGE INTO JOB 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 (A.EMPNO, B.JOB, B.DEPTNO);
서브쿼리 사용
MERGE INTO EMP A
USING (
SELECT AA.EMPNO
, AA.JOB
, AA.DEPTNO
FROM EMP AA, DEPT BB
WHERE AA.EMPNO = 7788
AND AA.DEPTNO = BB.DEPTNO) B
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);
WHERE 사용
오라클 10g 부터 UPDATE, DELETE 문에 WHERE 절 지원하고, INSERT 절에서 WHERE 절을 사용하면 오류 발생
MERGE INTO EMP A
USING DUAL ON (A.EMPNO = 7788)
WHEN MATCHED THEN
UPDATE
SET A.DEPTNO = 20
WHERE A.JOB = 'ANALYST';
DELETE 사용
오라클 10g 부터 DELETE 문 지원
MERGE INTO EMP A
USING DUAL ON (A.EMPNO = 7788)
WHEN MATCHED THEN
UPDATE
SET A.DEPTNO = 20
WHERE A.JOB = 'ANALYST'
DELETE
WHERE A.JOB <> 'ANALYST';
728x90