0

我需要做的是将记录插入到表 TAB_B 中,这是从选择到表 TAB_A 的结果(表结构相同),如下所示:

INSERT /*+ APPEND */ INTO TAB_B SELECT * FROM TAB_A WHERE [CONDITION]

问题是我需要知道插入了多少条记录,所以最简单的方法是在插入后计算它们:

SELECT COUNT(*) FROM TAB_A WHERE [CONDITION]

无论如何,如果我可以省略两次执行相同条件的查询,那就太好了,所以我可以这样做:

BEGIN
  INSERT /*+ APPEND */ INTO TAB_B SELECT * FROM TAB_A WHERE [CONDITION];
  DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
END;

问题是:“plsql 解决方案是否有任何缺点——尤其是在性能方面?我应该坚持 INSERT 后跟 COUNT,还是不坚持?”

编辑先生,我认为我的问题不能更清楚地提出,它是关于性能差异加上最终的缺点,而不是方法本身(我试图在标题和问题本身中更好地说明它)。您标记为重复的问题是关于如何计算行数,无论我的问题是这两种方法中哪一种在性能方面更好,以及使用任何提到的方法时是否有任何缺点。

4

1 回答 1

3

假设您在 PL/SQL 中执行此操作(如标记所示),完成您想要的最简单的方法是使用SQL%ROWCOUNT,如:

INSERT /*+ APPEND */ INTO TAB_B SELECT * FROM TAB_A WHERE [CONDITION];

nRows_inserted := SQL%ROWCOUNT;

要知道使用 COUNT(*) 查询实际插入了多少行,您必须在进行插入之前执行一次,然后再执行一次,以考虑表中可能存在在执行之前已经满足条件的行的可能性插入。

分享和享受。

于 2013-04-12T11:07:08.740 回答