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;
祝你好运。
请假设你有一个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;
祝你好运。