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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值