본문 바로가기

SQL(XML)

오라클 List 값 MERGE시키기

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