今天遇到一个问题,当使用Oracle批量插入时,数据库报了一个 “ORA-01790:表达式必须具有与对应表达式相同的数据类型”的错误,可是很奇怪的是,当我使用for循环一条一条插入时,并不会报错,于是我怀疑是有数据为空造成的,仔细查看了数据后,发现,有一个date类型的字段为空,导致批量插入时出现问题,于是我在插入sql中加上类类型限定,jdbcType=DATE,这样即使为空时,也不会存在问题。
这是我的插入sql:
<!-- 批量插入仅适合Oracle -->
<insert id="insertList" parameterType="java.util.List">
INSERT INTO L_TZ_RENSHE_JYDJXX17
(
xm,
sfzjlx,
sfzjhm,
gw,
xl,
ssdwmc,
ssdwtyshxydm,
ldhtqsrq,
ldhtjzrq,
djjgqc,
djrq,
rksj,
clsj,
recid,
userid
)
<foreach collection="list" item="bean" separator=" union all ">
SELECT
#{bean.xm},
#{bean.sfzjlx},
#{bean.sfzjhm},
#{bean.gw},
#{bean.xl},
#{bean.ssdwmc},
#{bean.ssdwtyshxydm},
#{bean.ldhtqsrq,jdbcType=DATE},
#{bean.ldhtjzrq,jdbcType=DATE},
#{bean.djjgqc},
#{bean.djrq},
#{bean.rksj},
#{bean.clsj},
#{bean.recid},
#{bean.userid}
FROM dual
</foreach>
</insert>
详情可以参考:https://blog.csdn.net/uskystars/article/details/79374469