批量插入多条数据(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>

发布了5 篇原创文章 · 获赞 0 · 访问量 49

猜你喜欢

转载自blog.csdn.net/weixin_43374578/article/details/104058479