Bulk insert pieces of data (Oracle and Mybatis)

** 1. Using Union all splicing (no primary key sequence)

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 file

// 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. Using Union all splicing (primary key using the sequence)

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 file

//其中序列已经预先设置好了
<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>

Released five original articles · won praise 0 · Views 49

Guess you like

Origin blog.csdn.net/weixin_43374578/article/details/104058479