0
CREATE OR REPLACE PROCEDURE testing AS
BEGIN

    insert into t3 select * from t2;

    insert into t1 select * from t4;

commit;
EXCEPTION WHEN OTHER THEN
     ROLLBACK;
END;

这将正常工作

t2 - 3 百万 t4 - 3 百万 我总共有 600 万条记录,由于某种原因,我的临时空间被填满了,所以我想要在插入每 10000 条记录后提交。

怎么做?

4

2 回答 2

0

希望这个片段有帮助。

--Test data creation
CREATE TABLE TEST_SO_BULK
AS
SELECT LEVEL COL1,'AVRAJIT'||LEVEL COL2 FROM DUAL
CONNECT BY LEVEL < 100000;


--Create another table to insert

CREATE TABLE TEST_SO1
AS
SELECT * FROM TEST_SO_BULK
WHERE 1=2;


--Bulk collect with limit clause
set serveroutput on;
DECLARE
TYPE lv
IS
  TABLE OF TEST_SO_BULK%ROWTYPE;
  lv_tab lv;
  CURSOR lvsql IS
  SELECT * FROM TEST_SO_BULK;
BEGIN
  OPEN lvsql;
  LOOP
  FETCH lvsql BULK COLLECT INTO lv_tab LIMIT 10000;
  dbms_output.put_line(lv_tab.COUNT);
  FORALL i IN lv_tab.FIRST..lv_tab.LAST
  INSERT INTO TEST_SO1 VALUES
  (
  lv_tab(i).col1,
  lv_tab(i).col2
  );
  EXIT WHEN lvsql%NOTFOUND;
  END LOOP; 
END;

--Check data count
select count(1) from test_so1;
于 2017-08-18T03:37:16.023 回答
0

我会使用BULK COLLECTand FORALL

请参阅使用 FORALL 的增量提交处理使用 BULK COLLECT 和 FORALL 的批量处理,了解一些可以根据您的情况调整的示例。

于 2017-08-17T23:01:43.613 回答