-
[Oracle,MySQL] mybatis foreach문을 이용해 다중 insert 하는 법DataBase/Oracle 2018. 8. 31. 17:12
Mysql과 oracle에서 다중 insert가 어떻게 다른지 비교하면서 설명할 생각이다.
먼저, MySQL에서 foreach로 다중 insert 사용 방법이다.
12345678910111213141516INSERT 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를 걸어주면 된다.
반면 오라클은 사용 방법은 위와 같이 하면 에러가 난다.
오라클에서의 사용방법은 다음과 같다.
123456789101112131415<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
'DataBase > Oracle' 카테고리의 다른 글
[Oracle] 오라클 CLOB형 LENGTH(길이) 구하기, SUBSTR(문자열 자르기) 하는 방법 (0) 2018.09.04 [Oracle] 프로시저(procedure), function에서 예외(exception)처리 (0) 2018.09.04 [Oracle] sql developer에서 'oracle에 복사' '확인' 버튼이 보이지 않을 때 해결방법 (0) 2018.08.31 [Oracle] ORA-01745: 호스트/바인드 변수명이 부적합합니다. 에러해결 (0) 2018.08.30 [Oracle] PLS-00215 문자열 길이 제약은 (1 .. 32767)범위이어야 합니다. 에러 해결 (0) 2018.08.28