过程:在 10000 条记录后提交


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 条记录后提交。

怎么办?

我会使用BULK COLLECTFORALL

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

希望这个片段有帮助。

--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;

最新更新