별집사의 IT세상

[SQL] oracle mybatis list데이터 insert 할 때 sequence 처리 본문

IT/SQL

[SQL] oracle mybatis list데이터 insert 할 때 sequence 처리

별집사 2023. 8. 11. 13:54
반응형

 

<insert id = "아이디" parameterType="java.util.HashMap">     
	<foreach collection="pList" item="item" open="INSERT ALL" close="SELECT * FROM DUAL" separator=" ">     
		INTO 테이블
        	(COL1,
             COL2,
             COL3)              
  		VALUES
            (#{item.col1},
             #{item.col2},
             #{item.col3})
	</foreach>
</insert>

이렇게 할 시 문제점은 sequence를 사용할때, seq_테이블.nextval를 이용하면 dup오류가 난다는 것이다.

(한번에 insert를 하게 되니 nextval이 같은 값으로 입력되는 것)

 

<insert id = "아이디" parameterType="java.util.HashMap">
	INSERT INTO 테이블
		(COL1,
		COL2,
		COL3)
	SELECT seq_테이블.nextval, A.* FROM (
        <foreach collection="pList" item="item" separator="UNION ALL">  
            SELECT #{item.col2} as COL2,
                    #{item.col3} as COL3
            FROM DUAL
        </foreach>
	) A
</insert>

이를 해결하는 방법으로 리스트를 dual을 이용해 동적테이블을 생성하여 거기에 sequence를 같이 select 하면 sequence 값이 차례대로 붙으며 잘 insert 된다.

 

반응형
Comments