批量插入多条数据(Oracle及Mybatis)

**1. 采用Union all 拼接(主键不用序列)

1.1. Sql

// 括号内为要插入的字段, 使用Union all拼接的方式
// Union All 对结果集进行并集操作,包括重复行
insert into Ecc_tcm.prm_skill_assess (OID,PERSON_NAME,CARTNO)
          select 1,'Jack',610528 from dual  // 第一条
union all select 2,'Tom',123456 from dual   // 第二条
union all select 3,'Lucy',123456 from dual;  // 第三条

1.2. Mybatis文件

// ECC_TCM.prm_skill_assess_S.nextval用序列获得主键OID的方式,这种写法不支持,否则会报错
// SQLSyntaxErrorException: ORA-02287: 此处不允许序号
<insert id="insertSkillAssessList" parameterType="java.util.List">
        insert into Ecc_tcm.prm_skill_assess t
        (t.OID,
        t.PERSON_NAME,
        t.CARTNO,
        )
        <foreach collection="list" item="item" index="index" separator="union all" >
            (SELECT
            #{item.oid},
            #{item.personName},
            #{item.cartno},
            from dual)
        </foreach>
</insert>

**2. 采用Union all 拼接(主键采用用序列)

2.1. Sql

insert into Ecc_tcm.prm_skill_assess t
(
   t.OID,
   t.PERSON_NAME,
   t.CARTNO
)
select  ECC_TCM.prm_skill_assess_S.nextval,ba.* 
from (
    select 'lee','123' from dual 
    union all
    select 'mei','456' from dual
 ) ba

2.2. Mybatis文件

//其中序列已经预先设置好了
<insert id="insertSkillAssessList" parameterType="java.util.List">
    insert into Ecc_tcm.prm_skill_assess t
    ( t.OID,
      t.PERSON_NAME,
      t.CARTNO
    )

    select ECC_TCM.prm_skill_assess_S.nextval,
          c.personName,
          c.cartno
    from
	
    (<foreach collection="list" item="item" index="index" separator="union all" >
    (select
         #{item.personName} personName,
         #{item.cartno} cartno
     from dual)
    </foreach>) c
	
</insert>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值