Oracle中Merge Into 的用法

一、背景

当我们需要将一张表的数据合并到另一张表中时,可以使用Oracle中的MERGE INTO语句。它可以根据指定的条件将数据插入目标表中,如果数据已存在,则更新目标表中的数据。

二、详细用法

下面是MERGE INTO语句的详细用法:

1. 指定目标表和源表:

MERGE INTO target_table
USING source_table

其中,target_table是要合并数据的目标表,source_table是要从中获取数据的源表。

2. 指定条件:

ON (condition)

condition是用于匹配源表和目标表的条件。这个条件可以是简单的等值条件,也可以是复杂的条件表达式。

3. 定义匹配时的操作:


WHEN MATCHED THEN
    UPDATE SET column1 = value1, column2 = value2, ...

当源表和目标表匹配时,执行的操作是更新目标表中的数据。可以使用SET关键字指定要更新的列和对应的值。

4. 定义不匹配时的操作:

WHEN NOT MATCHED THEN
    INSERT (column1, column2, ...)
    VALUES (value1, value2, ...)

当源表和目标表不匹配时,执行的操作是将源表中的数据插入到目标表中。使用INSERT关键字指定要插入的列和对应的值。

需要注意的是,当进行更新操作时,只有匹配的行才会被更新。而当进行插入操作时,只有不匹配的行才会被插入。

5. DEMO:

下面是一个完整的例子,将员工表中的数据合并到目标表中:

MERGE INTO target_table
USING source_table
ON (target_table.employee_id = source_table.employee_id)
WHEN MATCHED THEN
    UPDATE SET target_table.salary = source_table.salary
WHEN NOT MATCHED THEN
    INSERT (employee_id, salary)
    VALUES (source_table.employee_id, source_table.salary);

以上是Oracle中MERGE INTO语句的详细用法,可以根据具体需求进行调整和扩展。

6. XML语法:

<insert id="batchSave" parameterType="java.util.List">
    MERGE INTO PERSON t1
    USING (
		  <foreach collection="list" item="item" index="index" separator="union" >
			select 
				#{item.id,jdbcType=VARCHAR} ID,
				#{item.name,jdbcType=VARCHAR} NAME,
				#{item.age,jdbcType=VARCHAR} AGE,
				#{item.address,jdbcType=VARCHAR} ADDRESS,
				#{item.phone,jdbcType=VARCHAR} PHONE,
				#{item.hoppy,jdbcType=VARCHAR} HOPPY,
				#{item.createTime,jdbcType=TIMESTAMP} CREATE_TIME
			from dual
		  </foreach>
	    ) t2
    ON (
          t1.ID =  t2.ID
          AND t1.AGE = t2.AGE
       )
    WHEN MATCHED THEN
        UPDATE SET t1.CREATE_TIME = t2.CREATE_TIME
    WHEN NOT MATCHED THEN
        INSERT
            (ID, NAME, AGE, ADDRESS, PHONE, HOPPY, CREATE_TIME)
        VALUES 
            (t2.ID, t2.NAME, t2.AGE, t2.ADDRESS, t2.PHONE, t2.HOPPY, t2.CREATE_TIME)
</insert>
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Run,boy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值