首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >记录MERGE语句的结果

记录MERGE语句的结果
EN

Stack Overflow用户
提问于 2013-01-18 16:51:33
回答 2查看 2.4K关注 0票数 1

我有两个表:一个包含原始数据的临时表。其中的行可能是重复的(超过1次)。第二个是包含实际数据的目标表(每一行都是唯一的)。

我正在使用游标传输行。在游标中,我使用了MERGE语句。如何使用DBMS_OUTPUT.PUT_LINE打印到控制台,哪些行被更新,哪些行被删除?

根据official documentation的说法,这条语句没有这样的功能。

有什么变通方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-18 17:08:13

我不明白你为什么要这么做。dbms_output的输出需要有人在场查看。不仅如此,它需要有人查看所有的输出,否则它是毫无意义的。如果有超过20行,那么没有人会费心这么做。如果没有人查看所有的输出来验证,但您需要实际记录它,那么您这样做是在积极地伤害自己。

如果您确实需要记录哪些行被更新或删除,有几个选项;不过,这两个选项都涉及到性能影响。

  1. 您可以切换到ROWID,这使您能够使用临时表的ROWID创建游标。您将两个表的连接批量收集到下面的代码中。基于行‘s并根据您的业务逻辑更新/删除目标表,然后使用某种标志更新临时表,以指示所执行的操作。
  2. 您在目标表上创建一个trigger,用于记录另一个表发生的情况。

实际上,除非知道更新/删除的数量这一点很重要,否则您不应该做任何事情。创建MERGE语句的方式应确保在出现任何错误时都会出错,并使用error logging子句记录收到的任何错误。这些更有可能是你应该注意的事情。

票数 1
EN

Stack Overflow用户

发布于 2013-04-03 03:03:42

之前的帖子已经说过,这种方法是可疑的,因为光标/循环和用于审查的输出日志。

在SQL Server上,MERGE语句中有一个OUTPUT子句,它允许您使用$action (insert、update、delete)在另一个表中插入一行,以及插入或删除/覆盖所需数据中的任何列。这可以让您完全按照您的要求进行总结。

等效的Oracle RETURNING子句可能不适用于MERGE,但适用于UPDATE和DELETE。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14395287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档