Oracle批量插入数据写法
INSERT INTO USER (ID, NAME)
<foreach collection="list" item="item" index="index" separator="union all">
select #{item.id}, #{item.name}
from dual
</foreach>
注意事项
-
union all
这里的循环使用的union all拼接,Oracle中union all拼接要保证对应字段的类型相同,如果遇到错误 ORA-01790:表达式必须具有与对应表达式相同的数据类型,就是因为字段类型不匹配,这时需要针对不匹配字段处理,标注字段类型。可参考文章:Mybatis的jdbcType与Oracle,MySQL的对应类型 -
Oracle动态SQL长度为6000,这个长度准不准确本人没有正式测试过,但长度过长执行会失败,如果数据过多,尽量提前拆解集合批量插入数据。