Programming/Mybatis

[Mybatis] Oracle foreach insert 처리 에러

OriginMaster 2022. 2. 16. 01:28
반응형
  • 필요성 : Mybatis의 foreach문을 통해 List 타입의 HashMap/Hashtable의 데이터를 insert 함으로써 다량의 데이터를 입력할 수 있다.

 

  • Oracle 다중 데이터 insert
INSERT ALL 

INTO TABLE명 (컬럼명...) VALUES (값...) 
INTO TABLE명 (컬럼명...) VALUES (값...)
INTO TABLE명 (컬럼명...) VALUES (값...) 
.
.
.
SELECT * FROM DUAL;

 

 

  • Mybatis 상에서의 다중 데이터 insert (해당 데이터는 에러 발생함)
<insert id="insertList" parameterType="java.util.HashMap">
    <foreach collection="list" item="item" index="index" separator=" " open="INSERT ALL" close="SELECT * FROM DUAL">
        INTO TEST_TABLE (
        M_1,
        M_2
    ) VALUES
        (
            '${item.M_1}'
            , '${item.M_2}'
        )
    </foreach>
</insert>

 

 

실행 해본 결과 ORA-00933 에러가 발생했다....

 

 

 

 

검색해 본 결과 <insert> 를 <update>로 변경해주면 정상적으로 insert 됨을 확인했다.

출처 : https://blog.jojonari.dev/entry/%EB%A7%88%EC%9D%B4%EB%B0%94%ED%8B%B0%EC%8A%A4-%EC%9D%B4%EC%9A%A9%EC%8B%9C-insert-into-select

 

  • Mybatis 상에서의 다중 데이터 insert (정상동작)
<update id="insertList" parameterType="java.util.HashMap">
    <foreach collection="list" item="item" index="index" separator=" " open="INSERT ALL" close="SELECT * FROM DUAL">
        INTO TEST_TABLE (
        M_1,
        M_2
    ) VALUES
        (
            '${item.M_1}'
            , '${item.M_2}'
        )
    </foreach>
</update>

 

 +) 에러log 보고 내 쿼리에 문제있는 줄 알고 날린시간이.... 

 

반응형