生データを保持するソース テーブルがあります。
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と同じOUTPUTがありません。
これを達成する他の方法はありますか?これは MERGE で行う必要はありません。他のソリューションを受け入れることができます。
ありがとう