首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过程: 10000条记录后提交

过程: 10000条记录后提交
EN

Stack Overflow用户
提问于 2017-08-18 06:30:59
回答 2查看 3.8K关注 0票数 0
代码语言:javascript
复制
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 -300万t4 -300万总共我有600万条记录,由于某种原因,我的临时空间被填满了,所以我想要的是在每插入10000条记录后提交。

怎么办?

EN

回答 2

Stack Overflow用户

发布于 2017-08-18 07:01:44

我会使用BULK COLLECTFORALL

参见Incremental Commit Processing with FORALLBulk Processing with BULK COLLECT and FORALL以获取一些可根据您的情况进行调整的示例。

票数 0
EN

Stack Overflow用户

发布于 2017-08-18 11:37:16

希望这段代码能帮上忙。

代码语言:javascript
复制
--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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45745865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档