2011-12-29 4 views
4

私はアーカイブのためにテーブルにデータを挿入するSQL文を持っていますが、私は新しいテーブル(2)を更新するためにマージ・ステートメントを必要としますアーカイブに移動する必要がある古いテーブル(1)で変更されたデータ。月別アーカイブのデータを古いテーブルから新しくマージする

問題の一部は、移動したデータを古いテーブルから削除することです。私の挿入物はそれをしていませんが、私は元のテーブルから保存されたデータが削除される場所にそれを持っている必要があります。

このように1つのテーブルから別のテーブルにデータを移動するSQL文は1つありますか?それとも、2段階で操作する必要がありますか?

最初のステートメントは、年齢や他のいくつかの相対的な要因によってデータを移動しました。 インサートは、次のとおりです。

INSERT /*+ append */ 
    INTO tab1 
SELECT * 
    FROM tab2 
WHERE (Postingdate < TO_DATE ('2001/07/01', 'yyyy/mm/dd') 
     OR jobname IS NULL) 
    AND STATUS <> '45'; 

すべてのヘルプ感謝...

+0

そのパーティションを切り捨てた後

create table(id number primary key,name varchar,J_date date) partition by range(J_date)(PARTITION one_mnth VALUES LESS THAN(sysdate-30)), partition by range(J_date)(PARTITION one_mnth VALUES LESS THAN(maxvalue))); 

:私の考えは、日付にレンジ・パーティションを持つ表を作成することですのhttp:/ /docs.oracle.com/cd/E11882_01/server.112/e26088/statements_3001.htm#BABHHAHF –

答えて

0

merge文は、更新句にdelete文を追加することにより、1つのステートメントでこれを行うようになります。 Oracle Documentation on Mergeを参照してください。

+0

ただし、挿入と削除の両方が宛先表にのみ影響します。 –

+0

ソーステーブルからデータを削除するには、追加のdelete文が必要ですか? –

+1

あなたが正しいです、私は削除がソーステーブルのためであったことに気付かなかった。私は、これに(あなたがいずれかのテーブルにトリガを追加する場合を除いて) 'ワンショット'のソリューションがあるとは思わない - あなたは、挿入後に同等の削除ステートメントが必要です。 postingdate列の値が一度設定されても変更されない場合は、データの整合性の問題は発生しません。 –

0

私はあなたがパーティションテーブルでこれを試すべきだと思います。別のテーブルにして、そのパーティションを移動し、そしてあなたは、パーティションを交換することによって、これを達成することができるかもしれ

関連する問題