Programing/JAVA

Mybatis insert, update null 처리, 부적합한 열 유형 처리방법, Oracle Merge

리커니 2018. 10. 11.
반응형

Mybatis insert, update null 처리, 부적합한 열 유형 처리방법

 

Mybatis를 활용해 insert, update 시 변수의 값이 없을 시

부적합한 열 유형 (해당 변수=null) 에러가 발생합니다.

 

이를 처리하기 위해서는

if 태그를 활용하는 방법과

 

MERGE INTO C_TS_WETHER_INFO
USING DUAL
      ON (FRCST_DT = #{baseDate} AND WETHER_ID = #{wetherId})
 WHEN MATCHED THEN
     UPDATE SET
     <if test="t1h != null and t1h != ''">
           TMPRT = #{t1h}
     </if>
      .
      .
      .

 

jdbc type을 설정해 주는 방법이 있습니다.

 

 

varchar형은 jdbcType=VARCHAR

number형은 jdbcType=INTEGER

 

MERGE INTO C_TS_WETHER_INFO
            USING DUAL
               ON (FRCST_DT = #{baseDate} AND WETHER_ID = #{wetherId})
            WHEN MATCHED THEN
                UPDATE SET
                    TMPRT = #{t1h, jdbcType=INTEGER}
                  , ONE_TIME_PRCPT = #{rn1, jdbcType=INTEGER}
                  , SKY_STTUS = #{sky, jdbcType=INTEGER}
                  , ESWS_WIND_IRDNT = #{uuu, jdbcType=INTEGER}
                  , STNT_WIND_IRDNT = #{vvv, jdbcType=INTEGER}  
                  , HD = #{reh, jdbcType=INTEGER}
                  , PRCPT_STLE = #{pty, jdbcType=INTEGER}
                  , THNDBLT = #{lgt, jdbcType=INTEGER}
                  , WD = #{vec, jdbcType=INTEGER}
                  , WS = #{wsd, jdbcType=INTEGER}
            WHEN NOT MATCHED THEN
                INSERT (
                        FRCST_DT
                      , WETHER_ID
                      , TMPRT
                      , ONE_TIME_PRCPT
                      , SKY_STTUS
                      , ESWS_WIND_IRDNT
                      , STNT_WIND_IRDNT
                      , HD
                      , PRCPT_STLE
                      , THNDBLT
                      , WD
                      , WS
                    ) VALUES (
                          #{baseDate}
                        , #{wetherId}
                        , #{t1h, jdbcType=INTEGER}
                        , #{rn1, jdbcType=INTEGER}
                        , #{sky, jdbcType=INTEGER}
                        , #{uuu, jdbcType=INTEGER}
                        , #{vvv, jdbcType=INTEGER}
                        , #{reh, jdbcType=INTEGER}
                        , #{pty, jdbcType=INTEGER}
                        , #{lgt, jdbcType=INTEGER}
                        , #{vec, jdbcType=INTEGER}
                        , #{wsd, jdbcType=INTEGER}
                    )

 

위의 방법은 Mybatis 옵션으로 설정이 가능하다.

 

xml의 경우

<settings>
    <setting name="cacheEnabled" value="false" />
    <setting name="jdbcTypeForNull" value="NULL" />
</settings>

 

Java 파일의 경우

org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setCacheEnabled(false);
configuration.setJdbcTypeForNull(null);
반응형

댓글

💲 추천 글