oracle+mybatis批量插入报错的解决办法(命令未执行结束)
·
mybatis批量插入mysql的方法比较常规
一般都是批量插入list和array
<insert id="allinsert" parameterType="java.util.List">
insert into ZHYY_SDLR
(id, lrid, usage, tknumber, createtime, kind)
values
<foreach collection="list" item="item" index= "index" separator =",">
(#{item.id},
#{item.lrid},
#{item.usage},
#{item.tknumber},
#{item.createtime},
#{item.kind})
</foreach>
</insert>
collection代表传入的是list,如果是数组就写array,一般就直接写传的参数。item就是别名, separator指不一样的value之间的分隔符。
但是oracle的批量插入有所不同,按照上面的写法就会报“命令未执行结束”错误
正确写法:
<insert id="allinsert" parameterType="java.util.List">
insert into ZHYY_SDLR
(id, lrid, usage, tknumber, createtime, kind)
select t.* from
(
<foreach collection="list" item="item" separator="union all">
select #{item.id},
#{item.lrid},
#{item.usage},
#{item.tknumber},
#{item.createtime},
#{item.kind}
from dual
</foreach>
) t
</insert>
和上一个不同的是,separator应使用union all,并且用select * from dual 语句代替values()
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)