Oracle PL/SQL:使用表A的聚合数据更新表B
请假设您有一个Oracle表,表A,如下所示: 此表中的主要字段为字段1和字段2。你可以看到: a) 对于夫妇(AAA,1),我们有两个值:200.03和100.02; b) 对于耦合(BBB,3),我们有两个值:300.04和400.05 我们希望进行如下汇总,更新下表: 在表B的字段3中,我们希望存储关于夫妇的200.03和100.02之和(AAA,1),并且我们希望存储关于夫妇的300.04和400.05之和(BBB,3) 请想象一下,我们可能会有许多不同的夫妇: (ZZZ,77) (YYY,12) ... 等等 请假设引用一对夫妇的记录可能多于两个,在这种情况下,我们应该将关于同一对夫妇的所有记录的值相加 在我们的简单案例中,结果如下: 实际案例中有一个表a,其中包含大约2000万条记录,因此我想使用批量收集、更新和FORALL以PL/SQL编写软件 最好的方法是什么?请提供PL/SQL代码以解释如何解决该问题Oracle PL/SQL:使用表A的聚合数据更新表B,oracle,bulk,Oracle,Bulk,请假设您有一个Oracle表,表A,如下所示: 此表中的主要字段为字段1和字段2。你可以看到: a) 对于夫妇(AAA,1),我们有两个值:200.03和100.02; b) 对于耦合(BBB,3),我们有两个值:300.04和400.05 我们希望进行如下汇总,更新下表: 在表B的字段3中,我们希望存储关于夫妇的200.03和100.02之和(AAA,1),并且我们希望存储关于夫妇的300.04和400.05之和(BBB,3) 请想象一下,我们可能会有许多不同的夫妇: (ZZZ,77) (
非常感谢您考虑我的请求。坦率地说,我不会在这里使用批量收集和FORALL-我会使用合并语句。试试像这样的东西
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;
祝你好运。坦白地说,我不会在这里使用批量收集和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;
祝你好运。删除了一半的书面答案,只是更新了Bob的答案,但我从互联网上了解到,对于大型表格,合并起来并不方便。。。。。!我已经指定我们有两千万条记录,因此在一次交易中不可能更新两千万条记录。。。。!因此,采用批量收集的方法,更新和FORALL更方便。您最好弄清楚如何将数据子集到足够小的组中,以便使用合并,而不是通过将大容量收集到一个集合中,然后在这个相当大的数据集合中进行迭代,将价值2000万行的数据读入PL/SQL内存。祝你好运。当然,为了避免同时阅读2000万行,我打算在“限制”条款中加入“批量收集”。删除一半的书面答案,只是更新Bob’s-instead的投票。但我从互联网上了解到,对于大型表格,合并不方便。。。。。!我已经指定我们有两千万条记录,因此在一次交易中不可能更新两千万条记录。。。。!因此,采用批量收集的方法,更新和FORALL更方便。您最好弄清楚如何将数据子集到足够小的组中,以便使用合并,而不是通过将大容量收集到一个集合中,然后在这个相当大的数据集合中进行迭代,将价值2000万行的数据读入PL/SQL内存。祝你好运。当然,为了避免同时阅读2000万行,我打算用“限制”条款来“批量收集”。