普通插入vs plsql插入 - 优点和缺点

时间:2013-04-12 09:30:26

标签: sql oracle plsql

我需要做的是将记录插入到表TAB_B中,这是由select to table 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,还是没有?”

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

1 个答案:

答案 0 :(得分:3)

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

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

nRows_inserted := SQL%ROWCOUNT;

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

分享并享受。