by 농sql [Oracle 기초] oracle 오라클 [2019.10.08 09:07:18]
오라클에서 mege 구문으로 insert , delete, update 구문을 구현하려고 하는데
현재 insert, update는 구현하였지만
delete 구문을 적용하지 못하고 있어서 따로 작성하여 하고 있습니다.
merge 구문에 합쳐서 작성하고 싶은데 조언 요청드립니다.
1. 조건에 A 테이블과 B 테이블에 같은 데이터가 존재하면 UPDATE
2. 조건에 A 테이블과 B 테이블에 데이터가 존재하지 않으면 DELETE 후 INSERT
2번 가능한가요?
MERGE INTO target_t a USING ( SELECT NVL(b.pk, a.pk) pk , NVL(b.c1, a.c1) c1 , NVL(b.c2, a.c2) c2 , NVL2(b.pk, 'M', 'D') flag FORM target_t a FULL OUTER JOIN source_t b ON a.pk = b.pk ) b ON a.pk = b.pk WHEN MATCHED THEN UPDATE c1 = b.c1, c2 = b.c2 -- b(O) - a(O) DELETE WHERE b.flag = 'D' -- b(X) - a(O) WHEN NOT MATCHED THEN INSERT VALUES(b.pk, b.c1, b.c2) -- b(O) - a(X) ;