INSERT ALL

sylvie·2022년 1월 12일
0

ORACLE

목록 보기
2/6

##서론
오늘 팀회의에서 공유된 이슈중 하나가 for문을 반복하며 DB커넥션을 반복하여 insert를 하게되는 방법은 한 사용자가 여러개의 DB커넥션을 맺게되면 다른 사용자들의 DB커넥션의 문제가 발생한다는 것이였다.
이 이슈를 해결할 수 있는 방법 중 하나가 MyBatis의 foreach를 활용하여 INSERT ALL쿼리를 사용하는 것이다.

INSERT ALL 이란?

여러 개의 INSERT문을 한 번에 처리할 수 있다.

INSERT ALL 사용법

INSERT ALL 
INTO TABLE명 (컬럼명...) VALUES (값...) 
INTO TABLE명 (컬럼명...) VALUES (값...) 
. 
. 
. 
INTO TABLE명 (컬럼명...) VALUES (값...) 
SELECT * FROM SYS.DUAL

MyBatis의 foreach를 활용한 INSERT ALL

<update id="insMpAuth" parameterType="java.util.List">
  <foreach collection="list" item="item" open="INSERT ALL" close="SELECT * FROM DUAL" separator=" "> 
    	INTO WEB_MP_MENU VALUES (#{item.menuId}, #{item.groupId},'N','N','N', SYSDATE,'N') 
  </foreach> 
</update>

단, 여기서 주의해야할 점은 Insert문이지만 update 태그를 사용하여한다는 것이다.
만약 insert태그를 사용하게 되면 '명령어가 올바르게 종료되지 않았습니다.'라는
sql에러가 발생하게 된다.

0개의 댓글