我們有一個源表,其中保存原始數據:從另一個表更新表,但也插入
SourceTable
SD Product P1 P2
'01-Mar-2013' 'Prod1' 1 2
'02-Mar-2013' 'Prod1' 3 4
'03-Mar-2013' 'Prod1' 5 6
'04-Mar-2013' 'Prod1' 7 8
'04-Mar-2013' 'Prod2' 6 5
,我們有目標表如下圖所示:
DestinationTable
SD Product P1 P2 Active
'01-Mar-2013' 'Prod1' 9 10 1
我想編寫一個查詢,該查詢將處理每個產品每天的源表中的數據,並將所有新行插入到目標表中,但我們還應該將dest中的Active列更新爲0。表(如果在源中找到匹配行)(如果SD和Product列存在於目標中,則確定該表)。
處理數據後,destinationTable會應該是這樣的:
SD Product P1 P2 Active
'01-Mar-2013' 'Prod1' 9 10 0
'01-Mar-2013' 'Prod1' 1 2 1
'02-Mar-2013' 'Prod1' 3 4 1
'03-Mar-2013' 'Prod1' 5 6 1
'04-Mar-2013' 'Prod1' 7 8 1
'04-Mar-2013' 'Prod2' 6 5 1
我試圖用MERGE要做到這一點,但你不能更新,並在同一時間插入時有找到匹配。
MERGE DestinationTable AS d
USING (SELECT SD, Product, P1, P2 FROM SourceTable) AS s ON d.Product = s.Product AND s.SD = d.SD
WHEN MATCHED THEN UPDATE SET d.P1 = s.P1,
d.P2 = sdsP2
d.Active = 0
WHEN NOT MATCHED THEN
INSERT(SD,Product, P1, P2, Active)
VALUES(s.SD, s.Product, s.P1, s.P2, 1);
其實我已經做了什麼,我想使用OUTPUT語句在SQL做然而,這是Oracle 10g和Oracle沒有輸出相同的SQL。
有沒有其他的方法來實現這一點。這不必與MERGE一起完成,我可以爲任何其他解決方案開放。
感謝
ORACLE中的OUTPUT的等價物是RETURNING子句。不幸的是,MERGE不支持它。 – APC 2013-05-07 14:17:37
謝謝,因爲我已經更新了這個問題,這不一定要用Merge來完成。 – 03Usr 2013-05-07 14:20:55