Oracle 综合性DML操作—Merge

       当我们做程序开发时,难免会用到复杂的存储手段,本章就讲解其中一种:对目标表插入或更新数据,即:通过主键判断目标表是否有相匹配数据,若存在则更新,若不存在则插入,下面通过例子来详细介绍。

 

一、首先创建两张表,表结构不需要一致,主键字段也不需要相同。

Create Table mtable (

id Varchar2(5) Primary Key,

count Varchar2(5),

remark Varchar2(10));



Create Table ntable (

id Varchar2(5),

count Varchar2(5),

remark Varchar2(10),

notcie Varchar2(100));

alter table NTABLE  add primary key (ID, COUNT);

二、给两张表插入测试数据大家可以Get一下该方法,可以很方便的插入大批量数据,用于平时学习测试等。


Declare

i number;     

Begin

--向mtable中插入5条数据

   for i in 1..5 loop

      insert Into mtable Values (i,lpad(i,2,0), 'mTable');

   end loop;

--向mtable中插入5条数据,用于验证无法关联的数据是不会变更的

   for i in 11..15 loop

      insert Into mtable Values (i,lpad(i,2,0),'mTable');

   end loop;

--向ntable中插入5条数据,将第二个字段值乘2,用于测试Merge的update语句

    for i in 1..5 loop

      insert Into ntable Values (i,lpad(i*2,2,0), 'nTable','notice');

   end loop;

--向ntable中再次插入5条数据,用于测试Merge的insert语句

   for i in 6..10 loop

      insert Into ntable Values (i,lpad(i,2,0), 'nTable','notice');

   end loop;

end;

语句执行完成后,查看两张表中的数据:

 

三、使用Merge操作,通过ntable数据更新mtable表

Merge Into mtable m        --merge into 标明该SQL要对table进行DML操作

Using ntable n                   --using 标明要按照ntable数据进行比对

On (m.id = n.id)                 --该条件必须是目标表的主键字段,若为联合主键,则要将相关字段全部写上

When Matched Then

  Update Set m.count = n.count , m.remark = 'UPDATE'               --此处不能有分号

When Not Matched Then

  Insert Values(n.id,n.count,'INSERT');

执行完毕后,查看mTable中数据,与Merge前进行对比,如图所示

 

从对比图我们可以看到,mTable中ID 1-5的五条数据被更新;然后新插入了ID为6-10的数据;且ID11-15的数据没有变动。

 

四、总结

           通过Merge语句,可以在函数、存储过程中省掉复杂的逻辑判断,常用于两张表数据的信息同步,这样不仅使程序变得更加简洁明了,更增强了程序的可读性。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Aikes902

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

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

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

打赏作者

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

抵扣说明:

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

余额充值