mybatis ON DUPLICATE KEY UPDATE statement converted to oracle statement

on duplicate key update means that if there is the same unique primary key in the inserted data, it will be updated if it exists, and if it does not exist, it will be inserted. It is suitable for mysql database and used in oracle database.

MERGE INTO ..... using ...on ...when matched then ... when not matched then
Examples are as follows:

mysql:

insert into table (PID,SPWID,BTCD,SV,BXCD,BSW,BW,DSW,SC,NT,MODITIME)
VALUES
<foreach collection="list" item="bt" index="index" separator=",">
    ( #{bt.pid},#{bt.spwid},#{bt.btcd},#{bt.sv},#{bt.bxcd},#{bt.bsw},#{bt.bw}, #{bt.dsw},#{bt.sc},#{bt.nt},#{bt.moditime} )
</foreach>
ON DUPLICATE KEY UPDATE
    pid = values(pid),
    spwid = values(spwid),
    btcd = values(btcd),
    sv = values(sv),
    bxcd = values(bxcd),
    bsw = values(bsw),
    bw = values(bw),
    dsw = values(dsw),
    sc = values(sc),
    nt = values(nt),
    moditime = values(moditime)

Corresponding to oracle:

MERGE INTO table t2
USING(
<foreach collection="list" item="bt" index="index" separator="union all">
    SELECT
    #{bt.pid,jdbcType=VARCHAR} PID,
    #{bt.spwid,jdbcType=VARCHAR} SPWID,
    #{bt.btcd,jdbcType=VARCHAR} BTCD,
    #{bt.sv,jdbcType=DOUBLE} SV,
    #{bt.bxcd,jdbcType=VARCHAR} BXCD,
    #{bt.bsw,jdbcType=DOUBLE} BSW,
    #{bt.bw,jdbcType=DOUBLE} BW,
    #{bt.dsw,jdbcType=DOUBLE} DSW,
    #{bt.sc,jdbcType=DOUBLE} SC,
    #{bt.nt,jdbcType=VARCHAR} NT,
    #{bt.moditime,jdbcType=DATE} MODITIME
    from DUAL
</foreach>
)t1
ON (t2.PID = t1.PID)
WHEN MATCHED THEN
UPDATE SET
t2.SPWID=t1.SPWID,
t2.BTCD=t1.BTCD,
t2.SV=t1.SV,
t2.BXCD=t1.BXCD,
t2.BSW=t1.BSW,
t2.BW=t1.BW,
t2.DSW=t1.DSW,
t2.SC=t1.SC,
t2.NT=t1.NT,
t2.MODITIME=t1.MODITIME
WHEN NOT MATCHED THEN
INSERT (PID,SPWID,BTCD,SV,BXCD,BSW,BW,DSW,SC,NT,MODITIME) VALUES
(t1.PID,t1.SPWID,t1.BTCD,t1.SV,t1.BXCD,t1.BSW,t1.BW,t1.DSW,t1.SC,t1.NT,t1.MODITIME)

Guess you like

Origin blog.csdn.net/luwei_cool/article/details/117470998