개발/SQL
[SQL] - MERGE INTO
dongdev
2022. 3. 5. 17:31
데이터가 없으면 insert 있으면 update
oracle, mybatis
--쿼리 대상 [TABLE/VIEW]
MERGE INTO [TABLE/VIEW]
--비교대상 [TABLE/VIEW], DUAL은 테이블이 동일 할때 사용
USING [TABLE/VIEW/DUAL] ON
(
--조건에 사용한 COLUMN은 UPDATE 불가
[조건]
)
--조건 일치 시 UPDATE
WHEN MATCHED THEN
UPDATE SET
[COLUMN1] = [VALUE1],
[COLUMN2] = [VALUE2],
[COLUMN3] = [VALUE3]
...
--UPDATE후 DELETE 사용 가능(DELETE 단독 사용 안됨)
[DELETE WHERE[COLUMN1]=[VALUE1]]
--조건 불일치 시 INSERT
WHEN NOT MATCHED THEN
INSERT
(
[COLUMN1],
[COLUMN2],
[COLUMN3],
...
)
VALUES
(
[VALUE1],
[VALUE2],
[VALUE3],
...
)
ex)
<update id="ex" parameterType="java.util.List">
BEGIN
<foreach collection="list" item="item" separator="">
MERGE INTO GRADES AS G
USING DUAL ON
(
G.STUDENT_ID = #{item.studentId}
AND G.DATE = #{item.date}
)
WHEN MATCHED THEN
UPDATE SET
GRADES = #{item.grades},
UPD_ID = #{item.id},
UPD_DTM = SYSTIMESTAMP
WHEN NOT MATCHED THEN
INSERT
(
STUDENT_ID,
GRADES,
DATE,
RGST_ID,
RGST_DTM,
UPD_ID,
UPD_DTM
)
VALUES
(
#{item.sudentId},
#{item.grades},
#{item.date},
#{item.rgstId},
#{item.rgstDtm},
#{item.updId}
#{item.updDtm}
)
</foreach>
END
</update>