Oracle一次插入1000行

时间:2014-02-14 20:28:48

标签: oracle

我想用oracle

一次插入1000行

示例:

INSERT INTO MSG(AUTHOR) 
SELECT AUTHOR FROM oldDB.MSGLOG

这个插入需要很长时间,但如果我用ROWNUM< = 1000限制它,它会立即插入,所以我想创建一个导入,通过我的X行数并在时间插入1000。 / p>

由于

1 个答案:

答案 0 :(得分:1)

令人怀疑的是,这会真正提高性能,特别是考虑到SELECT语句的简单性。这必须是对表格或author上的索引进行全面扫描。如果扫描速度很慢,那么你在诊断潜在问题方面要好得多,而不是试图解决它(例如,oldDB.MsgLog可能会在高水位线下面有一些空块,强制进行全表扫描阅读比绝对必要的更多的块。

如果你真的想写一些更冗长,效率更低的PL / SQL来完成任务,你当然可以

DECLARE
  TYPE tbl_authors IS TABLE OF msg.author%TYPE;
  l_authors tbl_authors;

  CURSOR author_cursor 
      IS SELECT author
           FROM oldDB.MsgLog;
BEGIN
  OPEN author_cursor;
  LOOP
    FETCH author_cursor
     BULK COLLECT INTO l_authors
    LIMIT 1000;

    EXIT WHEN l_authors.count = 0;

    FORALL i IN 1..l_authors.count
      INSERT INTO msg( author )
        VALUES( l_authors(i) );
  END LOOP;
END;