박서희연구소

MyBatis(Oracle DB) 에서 foreach 를 이용하여 다중 Insert 시 생겼던 문제 본문

○ Programming [Web]/Feedback

MyBatis(Oracle DB) 에서 foreach 를 이용하여 다중 Insert 시 생겼던 문제

SEOHUI PARK 2020. 8. 5. 13:20
반응형

[문제]

Oracle DBMyBatis 를 이용해 foreach 문을 사용하던 중 문제가 발생했다.

[목표]

위 문제를 해결할 방법을 알아본다.

[해결]

Controller)

SampleDTO sampleDTO = new SampleDTO();

List<SampleDTO> list = new ArrayList<SampleDTO>();
Map<String, Object> map = new HashMap<String, Object>();
		 
for (int count = 0; count < sampleNo.length; count++) {		
	SampleDTO sampleInsertDTO = new SampleDTO();
    
	sampleInsertDTO.setSampleNo(no);
	list.add(sampleInsertDTO);
}
		
map.put("list", list);
sampleService.insertList(map);

 

MyBatis)

<update id="insertList" parameterType="java.util.Map">
	<foreach collection="list" item="item" index="index" separator=" " open="INSERT ALL" close="SELECT * FROM DUAL">
		INTO SAMPLE_TABLE
			(
			SAMPLE_NO,
            SAMPLE_CONTENT,
			)
		VALUES
			(
			#{item.sampleNo},
            #{item.sampleContent}
			)
	</foreach>
</update>

 

위와 같이 MyBatis 에서 update 문으로 사용하지 않고 insert 문으로 다중 insert 를 시도할 시 아래와 같은 에러가 발생한다.

Oracle DB 이용시, update 문을 사용하도록 하자. 

 

- 발생한 에러 메시지 -

; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다.

 

- 끝 -

반응형
Comments