oracle MyBatis에서 다중 Insert 하는 방법
mssql에서 oracle로 마이그레이션을 하는 도중 하나의 맵핑된 쿼리 안에서
여러개의 행을 insert하는 것에서 문제가 발생했다
mssql을 사용할떈 그냥 insert문을 여러개 쓰는것 만으로 한번에 여러 행을 입력 할 수 있었는데
오라클에선 구문오류가 발생하게 된다.
그렇게 방법을 찾다가 발견한 방법은
INSERT ALL 이다
사용법은 아주아주 굉장히 간단하다.
일단 MyBatis에서 여러 데이터를 맵형태로 보내 다이나믹 쿼리로 만드는 방법은
아래 링크를 참고하고
2015/07/09 - [Yame Programmer/전자정부프레임워크] - [ibatis] 동적쿼리 생성 및 outOfBoundsException 에러
ibatis와 mybatis의 사용방법이 상이하긴 하지만 맥락은 같으니 참고하면 좋을 것이다.
쿼리문은 아래와 같이 사용 하면 된다.
1 2 3 4 5 6 7 8 9 10 | <insert id="insertMtrlOrderList" parameterType="java.util.Map"> <foreach collection="list" item="item" index="index" open="INSERT ALL " separator=" " close="SELECT * FROM DUAL" > into FM_MATERIALS_ORDER_LIST(MTRL_ID, MTRL_ORDER_ID, MTRL_ENTERPRISE, UNIT_COST, MTRL_ORD_QUANTITY, APPLY_DATE) values (#{item.MTRL_ID}, #{item.MTRL_ORDER_ID}, #{item.MTRL_ENTERPRISE}, #{item.UNIT_COST}, #{item.MTRL_ORD_QUANTITY}, SYSDATE) </foreach> </insert> | cs |
시작할떄 INSERT ALL 을 써주고 본 쿼리으 insert문은 insert를 제외한 into부터 시작해서 작성하면 끝
역시 사람은 아는게 많아야 손발이 고생을 안하는 것 같다.
'Yame Programmer > SQL' 카테고리의 다른 글
[MSSQL] 프로시저 트리거 while 반복문 사용 방법, 변수를 컬럼명으로 사용 하는 방법 (0) | 2017.05.17 |
---|---|
[MSSQL]Insert실행시 자동증가되는 IDENTITY값 바로 가져오기 (0) | 2017.04.26 |
[Mybatis] getter for property named 에러 해결방법 (3) | 2017.01.11 |
[MyBatis] Oracle 부적합한 열유형 null 처리 방법 jdbcType=VARCHAR 안쓰기 (2) | 2017.01.11 |
[MSSQL] MSSQL 날짜 포맷 변환표 (0) | 2017.01.09 |