暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何计算合并中的插入和更新

askTom 2017-08-15
194

问题描述

是否可以在 “合并” 命令中计算插入的记录数和更新的记录数?
如果是,请给我一个例子?

专家解答

没有内置的方式。SQL % ROWCOUNT告诉您插入或更新的总数,而不是细目:

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:122741200346595110

你可以建立一个DIY解决方案虽然:

-向目标表添加时间戳和插入/更新标志
-在运行合并之前获取时间戳并将其填充到变量中
-使用此变量设置表的时间戳,并适当设置插入/更新标志
-查询表以查找刚刚更新的行,按标志分组:

create table t (
  x int, y date, z varchar2(1)
);

var dt varchar2(20);

exec :dt := to_char(sysdate, 'yyyy/mm/dd hh24:mi:ss');

insert into t values (1, null, null);

merge into t
using (select level l, :dt d from dual connect by level <= 2) d
on    (t.x = d.l)
when matched then update
  set y = to_date(:dt, 'yyyy/mm/dd hh24:mi:ss'), z = 'U'
when not matched then 
  insert (x, y, z)
  values (l, to_date(:dt, 'yyyy/mm/dd hh24:mi:ss'), 'I');
  
select z, count(*) from t
where  y = to_date(:dt, 'yyyy/mm/dd hh24:mi:ss')
group  by z;

Z  COUNT(*)  
U  1         
I  1    
复制


如果两个人在同一秒内运行此功能,则可能会出现误报。所以你可能想要使用时间戳与大量的小数秒来避免这种情况。或您在运行合并之前分配的其他值 (例如事务id,序列值或guid)。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论