[ibatis/oracle] 내장 반복문을 통해 대량(배치, batch) insert 를 하는 샘플

By | 10월 21, 2021

Mybatis 아니고, 골동품인 Ibatis 입니다.
생각지도 못한 에러들이 나와서 (ora-00933 등..) 삽질을 했네요. (시간 아깝 ㅠ.ㅡ)

    <insert id="BatchDAO.insertMemberRest" parameterClass="java.util.HashMap">
        INSERT ALL /* BatchDAO.insertMemberRest */
        <iterate property="mberList" conjunction=" ">
        INTO COMTNGNRLMBERREST
        (
            MBER_ID,
            PASSWORD
        )
        VALUES
        (
            #mberList[].MBER_ID#,
            #mberList[].PASSWORD#
        )
        </iterate>
        SELECT * FROM DUAL
    </insert>


  • 그런데 하다 보니 이것도 조심해야 할 것 같다는 생각이 들었다.
    mariadb 같은 것들은 prepared statement 파라미터 갯수제한이 거의 무제한인 것에 반해,
    오라클은 약 1000 개 정도 제한이 있기 때문에 레코드가 많을 경우 오류가 발생할 수 있기 때문이다.

insert all 사용시 주의사항

  • 쿼리 내에서 sequence.next_val 을 사용할 수 없다. (2회차 루프부터 계속 동일한 값을 리턴하는 듯)
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments