Oracle PLSQL在临时表中合并记录

Oracle PLSQL在临时表中合并记录,sql,oracle,plsql,Sql,Oracle,Plsql,我在PLSQL中有一个填充临时表的过程。数据如下所示: BUYER_NAME QUANTITY AMOUNT ------------------------------- JOHN 10 1200 JOHN 12 1310 ALAN 15 1450 ALAN 10 1200 JOHN 20 2400 我需要对每个买家的数量和金额进行汇总,

我在PLSQL中有一个填充临时表的过程。数据如下所示:

BUYER_NAME  QUANTITY   AMOUNT
-------------------------------
JOHN        10         1200
JOHN        12         1310
ALAN        15         1450
ALAN        10         1200
JOHN        20         2400
我需要对每个买家的数量和金额进行汇总,然后删除现有数据并再次填写表格,以便每个买家的名字只包含一次总数量和金额


我知道如果我创建另一个临时表并通过它传输数据,这是可以做到的。但是,是否有一种方法可以将记录合并到同一临时表和同一会话中?

听起来这里的问题在于填充表的initil pl/sql过程。为什么不修改它来实现这一点呢?我怀疑答案是它会大量使用pl/sql——如果是这样,请尽一切努力将其转换为sql,或者将其转换为一个流水线函数,您可以从中选择并聚合其输出


除此之外,我只是将结果汇总到另一个表中。我假设这些是全局临时表,因此这样做实际上没有太大的开销,因为直接插入GTT的路径要比修改已经存在的表有效得多。

MERGE语句呢@我想知道在这种情况下merge语句如何工作,因为数据源是同一个表。这不是一种好的操作方式。为了做好这项工作,我建议您使用该过程填充一个全局临时表,然后将分组的数据合并到一个最终表中,其中买方名称是唯一的列。我同意聚合和和不同的操作很可能在一个查询中完成。也许这甚至不需要临时表,那么一个流水线函数就足够了。实际上,在最初的PLSQL中,数据不能聚合。数据经过处理并计算出值,然后插入临时表。我可以在同一个会话中创建同一临时表的两个实例,并在它们之间进行数据传输吗?@asim ishaq:我很确定您可以在同一个状态中聚合数据。为什么不向我们展示填充temp表的语句呢?首先看看如何使用流水线函数-如果不需要详细结果,就不要编写它们。在回答您的问题时,最好将临时表定义为全局临时表,因为它们不需要太多的日志记录,特别是不需要重做,因为数据永远不需要恢复,并且它们是自清空的。您可以将它们定义为模式的永久部分,而不是在处理过程中。如果您确实需要两个,那么创建两个单独的。