Programing/JAVA
Mybatis insert, update null 처리, 부적합한 열 유형 처리방법, Oracle Merge
리커니
2018. 10. 11. 10:47
반응형
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);
반응형