求解:oracle数据库复杂SQL分批提交的方法

oracle数据库复杂SQL分批提交的方法
如题,现在有一个业务场景涉及到多表关联,且数据量很大约为100亿左右,一次提交的话,耗时大约12小时甚至更久,
如何实现将多表关联的查询结果分批提交至一张汇总表中呢?

“Devil组”引证GPT后的撰写:
可以使用Oracle数据库中的分页查询(Paging Query)以及分批提交(Batch Processing)功能来实现将多表关联的查询结果分批提交至一张汇总表中。

下面是一些具体的实现方法:

使用分页查询功能:
Oracle数据库中的分页查询功能可以通过使用ROWNUM关键字来实现。例如,以下查询语句将返回表A中的前10行数据:

SELECT * FROM (SELECT A.*, ROWNUM RN FROM TABLE_A A) WHERE RN <= 10;

可以根据实际需要调整查询条件,实现分批查询数据的目的。

使用分批提交功能:
在Oracle数据库中,可以使用PL/SQL中的游标(Cursor)来实现分批处理数据。可以使用游标从源表中获取数据,并将数据逐一插入到汇总表中。以下是一个示例代码:

DECLARE
  CURSOR cur_data IS
    SELECT * FROM TABLE_A;
  
  TYPE type_data IS TABLE OF cur_data%ROWTYPE;
  arr_data type_data;
BEGIN
  OPEN cur_data;
  LOOP
    FETCH cur_data BULK COLLECT INTO arr_data LIMIT 10000;
    EXIT WHEN arr_data.COUNT = 0;
    
    FORALL i IN 1..arr_data.COUNT
      INSERT INTO TABLE_SUMMARY (COL1, COL2, COL3, ...) VALUES (arr_data(i).COL1, arr_data(i).COL2, arr_data(i).COL3, ...);
    
    COMMIT;
  END LOOP;
  CLOSE cur_data;
END;

用游标CUR_DATA从表TABLE_A中获取数据,并使用数组ARR_DATA进行批量插入操作。每插入10000条数据后,使用COMMIT提交事务。

可以根据实际需要,调整游标的查询条件以及批量插入的数量。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^