MERGE 는 반복문으로 돌릴수 없다. 해서 다른 방법으로 사용해야한다.
foreach를 통해 받은 List를 UNION을 통하여 가상의 테이블을 만들고 비교 하여 MERGE시키는 방법이다.
mybatis
<update id="MERGETEST" parameterType="java.util.List">
MERGE INTO TBNAME R1
USING (
<foreach collection="list" item="item" open="" close="" index="index" separator="UNION">
SELECT
#{item.item1} as item1,
#{item.item2} as item2,
#{item.item3} as item3
FROM DUAL
</foreach>
) T1
ON (R1.item1 = T1.item1)
WHEN MATCHED THEN
UPDATE
SET
R1.item2 = T1.item2,
R1.item3 = T1.item3
WHEN NOT MATCHED THEN
INSERT (
item1,
item2,
item3
)
VALUES (
T1.item1
T1.item2
T1.item3
)
</update>
ibatis
<update id="MERGETEST" parameterType="java.util.List">
MERGE INTO TBNAME R1
USING (
<iterate conjunction="UNION">
SELECT
#[].item1 as item1,
#[].item2 as item2,
#[].item3 as item3
FROM DUAL
</iterate>
) T1
ON (R1.item1 = T1.item1)
WHEN MATCHED THEN
UPDATE
SET
R1.item2 = T1.item2,
R1.item3 = T1.item3
WHEN NOT MATCHED THEN
INSERT (
item1,
item2,
item3
)
VALUES (
T1.item1
T1.item2
T1.item3
)
</update>
'SQL(XML)' 카테고리의 다른 글
오라클 그룹화 한줄로 만들기 (0) | 2021.11.02 |
---|---|
SELECT 컬럼 순서대로 가져오기 (0) | 2021.07.29 |