我有两个表:一个包含原始数据的临时表。其中的行可能是重复的(超过1次)。第二个是包含实际数据的目标表(每一行都是唯一的)。
我正在使用游标传输行。在游标中,我使用了MERGE语句。如何使用DBMS_OUTPUT.PUT_LINE打印到控制台,哪些行被更新,哪些行被删除?
根据official documentation的说法,这条语句没有这样的功能。
有什么变通方法吗?
发布于 2013-01-18 17:08:13
我不明白你为什么要这么做。dbms_output的输出需要有人在场查看。不仅如此,它需要有人查看所有的输出,否则它是毫无意义的。如果有超过20行,那么没有人会费心这么做。如果没有人查看所有的输出来验证,但您需要实际记录它,那么您这样做是在积极地伤害自己。
如果您确实需要记录哪些行被更新或删除,有几个选项;不过,这两个选项都涉及到性能影响。
实际上,除非知道更新/删除的数量这一点很重要,否则您不应该做任何事情。创建MERGE语句的方式应确保在出现任何错误时都会出错,并使用error logging子句记录收到的任何错误。这些更有可能是你应该注意的事情。
发布于 2013-04-03 03:03:42
之前的帖子已经说过,这种方法是可疑的,因为光标/循环和用于审查的输出日志。
在SQL Server上,MERGE语句中有一个OUTPUT子句,它允许您使用$action (insert、update、delete)在另一个表中插入一行,以及插入或删除/覆盖所需数据中的任何列。这可以让您完全按照您的要求进行总结。
等效的Oracle RETURNING子句可能不适用于MERGE,但适用于UPDATE和DELETE。
https://stackoverflow.com/questions/14395287
复制相似问题