2013-04-20 40 views
0

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

BUYER_NAME QUANTITY AMOUNT 
------------------------------- 
JOHN  10   1200 
JOHN  12   1310 
ALAN  15   1450 
ALAN  10   1200 
JOHN  20   2400 

我需要总结的数量和金额为每个买家,然后删除现有数据,并再次填写该表格以使得每个买家的名称,总数量和金额才有一次。

我知道这可以完成,如果我创建另一个临时表并通过它传输数据。但是,有没有一种方法可以合并同一临时表(以及同一个会话中)内的记录?

+0

MERGE'声明怎么样? http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm – 2013-04-20 07:10:53

+0

@a_horse_with_no_name我想知道在这种情况下合并语句如何工作,因为数据源是同一个表。 – 2013-04-20 07:14:25

+0

这不是一个好的操作方法。为了做得好,我建议你用程序填充全局临时表,然后将分组数据合并到最终表中,其中BUYER_NAME是唯一的列。 – 2013-04-20 11:26:38

回答

0

这听起来像这里的问题是与填充表的initil pl/sql过程。为什么不修改它来做到这一点?我怀疑答案是它会大量使用pl/sql - 如果是这样,尽一切努力将其转换为SQL,或者将其转换为可以选择并汇总输出的流水线函数。

除此之外,我只是将结果汇总到不同的表格中。我假设这些都是全局临时表,所以实际上没有太多的开销,因为直接路径插入GTT比修改现有的表更有效。

+0

我同意聚合总和和“独特”操作最可能在单个查询中完成。也许这甚至不需要临时表(然后流水线功能可能就足够了)。 – 2013-04-20 07:17:17

+0

实际上,在最初的PLSQL中,数据不能被聚合。数据被处理(值计算),然后插入临时表。我可以在同一个会话中创建两个相同临时表的实例并在它们之间进行数据传输吗? – 2013-04-20 07:20:29

+0

@ asim-ishaq:我很肯定你可以在同一个状态句中聚合数据。你为什么不告诉我们填充临时表的陈述? – 2013-04-20 07:27:47