Oracle PL/SQL:使用 table A 的聚合数据更新 table B

Oracle PL/SQL: Update table B with aggregation data of table A

请假设你有一个Oracletable,TABLEA,如下:

在此table中,主要字段是 FIELD1 和 FIELD2。你可以看到:

a) 对于一对 (AAA, 1) 我们有两个值:200.03 和 100.02; b) 对于夫妇 (BBB, 3) 我们有两个值:300.04 和 400.05。

我们想按如下方式进行总和聚合,更新以下内容table:

在table B 的字段3 中,我们想存储200.03 和100.02 的总和,参考夫妇(AAA, 1),我们想存储300.04 和400.05 的总和与参考这对夫妇(BBB,3)。

请想象一下,我们可以有很多不同的情侣: (ZZZ, 77) (年年年,12) ...等等。

请假设一对夫妇的记录可能不止两个,在这种情况下,我们应该将同一对夫妇的所有记录的值相加。

在我们的简单示例中,结果如下:

真实案例有一个tableA,大约有2000万条记录,所以我想在PL/SQL中使用BULK COLLECT、UPDATE和FORALL来编写软件。

最好的方法是什么?请提供 PL/SQL 代码以解释如何解决问题。

非常感谢您考虑我的请求。

坦率地说,我不会在这里使用 BULK COLLECT 和 FORALL - 我会使用 MERGE 语句。试试像

MERGE INTO TABLE_B b
  USING (SELECT FIELD1, FIELD2, SUM(FIELD3) AS TOTAL_FIELD3
           FROM TABLE_A
           GROUP BY FIELD1, FIELD2) a
    ON (b.FIELD1 = a.FIELD1 AND
        b.FIELD2 = a.FIELD2)
WHEN NOT MATCHED THEN
   INSERT (FIELD1, FIELD2, FIELD3)
     VALUES (a.FIELD1, a.FIELD2, a.TOTAL_FIELD3)
WHEN MATCHED THEN
   UPDATE
     SET FIELD3 = a.TOTAL_FIELD3;

祝你好运。