본문 바로가기

study/java

[MyBatis] 시퀀스 자동증가(NEXTVAL) 사용한 INSERT foreach 쿼리

리스트 파라메터의 foreach 사용방법에 대해서는 아래 게시글을 참고해주세요.

 

[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE)

[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE) foreach문은 사용할 때마다 사용되는 위치도 속성도 어려워서 더이상 헷갈리지 않기 위해 남겨본다 :-) ! foreach문의 속성은 다음과 같다. 구분.....

haenny.tistory.com

 

 

시퀀스를 키값으로 갖는 테이블의 데이터를 INSERT할 때, 보통 시퀀스를 생성하여 아래와 같이 추가한다.

<insert id="insCustomer" parameterType="customerVO">
	<selectKey keyProperty="customerSeq" resultType="String" order="BEFORE">
		SELECT CUSTOMER_SEQ.NEXTVAL AS customerSeq FROM SYS.DUAL
	</selectKey>
	INSERT INTO WEB_G_CUSTOMER (
		  CUSTOMER_SEQ
		, CUSTOMER_DIV
		, EMAIL
		, PASSWORD
		, TITLE
		, CONTENT
		, REG_DT
		, PROGRESS_CD 
	) VALUES (
		  #{customerSeq}
		, '4'
		, #{email}
		, #{password}
		, #{title}
		, #{content}
		, SYSDATE
		, #{progressCd}
	)
</insert>

 

 

그렇다면,  파라메터가 리스트인 경우는 시퀀스를 어떻게 가져와서 저장해야할까?

 

 

구조상 INSERT를 할때마다 시퀀스의 NEXTVAL값을 가져와서 추가를 해야하는데,

foreach 태그 내 selectKey 태그를 사용하면 아래와 같은 에러가 뜨는 것을 확인할 수 있다.

The content of element type "foreach" must match "(include|trim|where|set|foreach|choose|if|bind)".

 

 

그렇다면 시퀀스 자동증가 테이블의 리스트 파라메터를 INSERT할 때는 다음과 같이 하면 된다 !

<update id="insFileList" parameterType="java.util.List">
	INSERT INTO WEB_G_FILE (
		  FILE_SEQ
		, FILE_PATH
		, REAL_FILE_NM
		, FILE_NM
		, FILE_EXTENSION
		, FILE_SIZE
		, REG_DT
		, USE_YN
		, BOARD_SEQ
		, BOARD_DIV
	)
	SELECT FILE_SEQ.NEXTVAL AS fileSeq
		 , T.* 
	  FROM (
	         <foreach collection="list" item="item" index="index" separator="union all">
			SELECT #{item.filePath} as filePath
			        , #{item.realFileNm} as realFileNm
			        , #{item.fileNm} as fileNm
			        , #{item.fileExtension} as fileExtension
			        , #{item.fileSize} as fileSize
			        , SYSDATE as regDt
			        , 'Y' as useYn
			        , #{item.boardSeq} as boardSeq
			        , '4' as boardDiv
			 FROM SYS.DUAL
	         </foreach> 
	  ) T
</update>

 

 

 

시퀀스 생성방법을 모른다면 다음 게시글을 참고하자 !

 

[Oracle] 자동증가 SEQUENCE 생성, 조회, 삭제

[Oracle] 자동증가 SEQUENCE 생성, 조회, 삭제 SEQ값을 키 값으로 가지고 있는 테이블을 저장할 때 MAX(SEQ)+1로 데이터를 저장하게되면 데이터가 쌓일수록 과부하가 걸린다. 따라서 시퀀스를 생성하여 시퀀스의.....

haenny.tistory.com

 

 

https://haenny.tistory.com/126  에서 퍼옴