问题描述
是否可以在 “合并” 命令中计算插入的记录数和更新的记录数?
如果是,请给我一个例子?
如果是,请给我一个例子?
专家解答
没有内置的方式。SQL % ROWCOUNT告诉您插入或更新的总数,而不是细目:
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:122741200346595110
你可以建立一个DIY解决方案虽然:
-向目标表添加时间戳和插入/更新标志
-在运行合并之前获取时间戳并将其填充到变量中
-使用此变量设置表的时间戳,并适当设置插入/更新标志
-查询表以查找刚刚更新的行,按标志分组:
如果两个人在同一秒内运行此功能,则可能会出现误报。所以你可能想要使用时间戳与大量的小数秒来避免这种情况。或您在运行合并之前分配的其他值 (例如事务id,序列值或guid)。
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
920次阅读
2025-03-17 11:33:53
Oracle DataGuard高可用性解决方案详解
孙莹
392次阅读
2025-03-26 23:27:33
墨天轮个人数说知识点合集
JiekeXu
334次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
324次阅读
2025-04-08 09:12:48
Oracle SQL 执行计划分析与优化指南
Digital Observer
290次阅读
2025-04-01 11:08:44
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
276次阅读
2025-03-24 09:42:53
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
276次阅读
2025-03-19 14:41:51
oracle定时任务常用攻略
virvle
264次阅读
2025-03-25 16:05:19
Oracle NetSuite 客户说|健合(H&H)集团部署 Oracle NetSuite,全面提升全球运营效率
甲骨文中国
252次阅读
2025-03-28 15:00:30
Oracle 19c RAC更换IP实战,运维必看!
szrsu
249次阅读
2025-04-08 23:57:08