2 mr songas Mr_SongAS 于 2014.11.21 17:10 提问

mybatis加oracle批量insert中的序列问题,可不可以用union做批量的sql语句--急
<insert id="saveManyPopInfo" parameterType="java.util.List">
    insert into popinfo (popid,popname,remark)
    select seq_popid.nextval,p.* from (
    <foreach collection="list" item="pop" separator="union all">
        select #{pop.popname},#{pop.remark} from dual
    </foreach>
    ) p
</insert>
该代码可以实现批量新增的问题,但是我希望用的是union all的方法,即:
<insert id="saveManyPopInfo" parameterType="java.util.List">
           <!--这里的selectKey 感觉只是执行了一次,因为会报一个叫插入重复的错误-->
    <selectKey keyProperty="p1" order="BEFORE" resultType="int">
        select seq_popid.nextval from dual
    </selectKey>
    insert into popinfo (popid,popname,remark)
    <foreach collection="list" item="pop" separator="union all">
        select #{p1},#{pop.popname},#{pop.remark} from dual
    </foreach>
</insert>
    怎么可以用union all来解决批量新增的问题?

5个回答

Mr_SongAS
Mr_SongAS   2014.11.21 17:11


<!--这里的selectKey 感觉只是执行了一次,因为会报一个叫插入重复的错误-->

select seq_popid.nextval from dual

insert into popinfo (popid,popname,remark)

select #{p1},#{pop.popname},#{pop.remark} from dual


怎么可以用union all来解决批量新增的问题?

tai8feng
tai8feng   2014.11.21 18:00

union all? 它不是用来合并数据的吗?基本用来查询。。。没听说过可以用来插入啊

Mr_SongAS
Mr_SongAS 可以用来插入,一条语句插入多个值
3 年多之前 回复
shijing266
shijing266   2014.11.26 10:43

批量插入么? 我写过一篇博客,关于ibatis批量插入,你看看吧http://blog.csdn.net/moneyshi/article/details/22807239

Mr_SongAS
Mr_SongAS 没有涉及到Oracle的序列问题,以及selectKey只能循环一次的问题
3 年多之前 回复
beier9737
beier9737   2014.12.10 17:12

第一个插入不就是union all吗

beier9737
beier9737   2014.12.10 17:12

separator="union all"已经是union all了啊

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!