Oracle批量插入

mybatis使用foreach批次插入,解决sequence只查询一次的问题

oracle的批量插入方式是: 

insert  into db(id, zgbh, shbzh) 
        select '1', '2', '3' from dual 
        union all select '2', '3', '4' from dual 
        union all select '3', '4', '5' from dual 
        union all select '4', '5', '6' from dual 
        union all select '5', '6', '7' from dual 

 

成功代码如下:

<insert id="batchInsert" parameterType="java.util.List">
	INSERT INTO T_SYS_RESOURCE (RES_ID,RES_CODE,RES_NAME,REMARK,RES_TYPE_ID,INIT_FLAG)
	SELECT SEQ_SYS_RESOURCE.NEXTVAL,A.RES_CODE,A.RES_NAME,A.REMARK,A.RES_TYPE_ID,A.INIT_FLAG FROM( 
    	<foreach collection="list" item="item" index="index" separator="UNION ALL" >
        	SELECT #{item.resCode} RES_CODE,#{item.resName} RES_NAME,#{item.remark} REMARK,
        	#{item.resType.resTypeId} RES_TYPE_ID,#{item.initFlag} INIT_FLAG FROM DUAL 
    	</foreach>
    	) A
</insert>

 foreach拼出来的数据作为一张表A,然后从表A中查询数据,再接上从sequence中读取的值作为id。这样sequence的值就会多次读取,id就会不一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值