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就会不一样。

猜你喜欢

转载自lty3039-163-com.iteye.com/blog/2272017