merge 구문 문의드립니다. (update,insert,delete) 0 3 140

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번 가능한가요?

by 마농 [2019.10.08 09:46:13]

표현이 모호합니다.
명확하게 표현해 주세요.
예를 들어 주세요.


by 꼬랑지 [2019.10.08 09:54:42]

존재하지 않는 데이타를 굳이 DELETE할 이유가 없지 않아요?

그리고 MERGE문에 조건을 따지는 구문은 2가지 인데 각각 쓰임새가 정해져 있습니다

WHEN MATCHED THEN - UPDATE,DELETE 만 가능

WHEN NOT MATCHED THEN - INSERT 만 가능


by 마농 [2019.10.08 13:15:21]
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)
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입