○ Programming [Web]/Feedback
MyBatis(Oracle DB) 에서 foreach 를 이용하여 다중 Insert 시 생겼던 문제
SEOHUI PARK
2020. 8. 5. 13:20
반응형
[문제]
Oracle DB 에 MyBatis 를 이용해 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 명령어가 올바르게 종료되지 않았습니다.
- 끝 -
반응형