2013-04-20 65 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