DataBase/Oracle
[Oracle,MySQL] mybatis foreach문을 이용해 다중 insert 하는 법
희랍인 조르바
2018. 8. 31. 17:12
Mysql과 oracle에서 다중 insert가 어떻게 다른지 비교하면서 설명할 생각이다.
먼저, MySQL에서 foreach로 다중 insert 사용 방법이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | INSERT INTO choco_table ( number_id , public_id , div , create_date , create_id ) VALUES <foreach collection="list" item="item" index="index" separator=","> ( #{item.number_id} , #{item.public_id} , #{item.div} , NOW() , #{item.create_id} ) </foreach> | cs |
구분자가 콤마(,)로 구분된다. 값이 들어갈 부분 VALUES 이후부터 foreach를 걸어주면 된다.
반면 오라클은 사용 방법은 위와 같이 하면 에러가 난다.
오라클에서의 사용방법은 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <foreach collection="list" item="item" index="index" separator=" " open="INSERT ALL" close="SELECT * FROM DUAL"> INTO choco_table ( number_id , public_id , div , create_date , create_id ) VALUES( #{item.number_id} , #{item.public_id} , #{item.div} , SYSDATE , #{item.create_id} ) </foreach> | cs |
INSERT ALL을 이용한다.
구분자는 콤마가 아닌 공백(" ")으로 처리된다.
foreach 자체 기능을 통해 open에 insert all을 해주고 마지막 select * from dual로 처리해준다.
* 추가내용: oracle을 사용하고 mybatis 사용시, xml문에서 mapper 형식을 insert(<insert id="" >)로 하면 sql command not properly ended 라는 에러가 난다. update(<update id="" ~~~>)로 해주어야 에러가 나지 않는다.
오라클 부분 출처: http://yamea-guide.tistory.com/166