DB Oracle

[Oracle] MERGE 구문

아잠만_ 2024. 9. 27. 19:18
MERGE INTO STOCK S -- STOCK테이블을 업데이트할 대상으로 설정
USING (SELECT GDS_CODE, BZENT_NO, QTY -- USING절을 통해 STOCK테이블과 연결할 데이터 소스 정의
       FROM STOCK_PO
       WHERE PO_NO = #{poNo}) SP
ON (S.GDS_CODE = SP.GDS_CODE AND S.BZENT_NO =  -- 조인 조건
		(SELECT BZENT_NO FROM PO WHERE PO_NO = #{poNo}))
WHEN MATCHED THEN -- 조인 조건이 일치하는 경우에 수행
    UPDATE SET S.QTY = S.QTY + SP.QTY
WHEN NOT MATCHED THEN -- 조인 조건이 일치하는 않는 경우에 수행
    INSERT (GDS_CODE, BZENT_NO, QTY)
    VALUES (SP.GDS_CODE, (SELECT BZENT_NO FROM PO WHERE PO_NO = #{poNo}), SP.QTY);

 

MERGE INTO 는 하나의 쿼리문으로 INSERT, UPDATE, DELETE 작업을 해야되는 경우에 사용한다

오라클 9i부터 사용할 수 있으며 DELETE문은 10g부터 사용할 수 있다

 

단일 MERGE문을 사용시에 USING절에 DUAL을 넣어 ON 조건문을 써서 UPDATE나 INSERT를 넣는다