2017-03-01 5 views
0

2番目の表はソース(my_data)、2番目は宛先(my_data_backup)のシナリオです。アーカイブの種類の実際のデータとそのデータを毎日バックアップ・テーブルに移動し、のマージSQLを使用してソース・テーブルから削除します。Oracle Merge Sqlの挿入先とソースからの削除

すなわち

my_dataとの両方をmy_data_backupは、同じスキーマ

my_dataテーブルには10行が含まれているとmy_data_backupは私がmy_data_backupに10件のレコードを挿入し、my_dataからそれらのレコードを削除したい0行が含まれています。

+0

はセカンドランで貸し付けは、あなたは5行以上のmy_dataを持っています。今バックアップには15行が含まれ、my_dataは再び空になるはずですか?また、バックアップテーブルのキーは何ですか?キーが再び 'my_data'から再び来ないのですか? – Utsav

+0

はい、両方の重複はありません。一日の終わりに私はmy_dataからmy_data_backupにデータを移動します。 –

+0

あなたはここでどのデータ量を話していますか? – BobC

答えて

1

MERGEは、ソースではなく宛先テーブルでの操作に便利です。

begin 
    delete from my_data_backup; 
    insert into my_data_backup 
    select * 
    from my_data; 
    delete from my_data; 
    commit; 
exception 
    when others then 
     rollback; 
     -- handle here 
end; 
/

あなたはまた、手続きに上記を入れて、プロシージャを呼び出すことができます。

あなたは匿名のPLSQLブロックを使用することができます。

削除の代わりにtruncate文を使用すると、テーブルサイズが大きいほど高速になりますが、DDLであれば暗黙のコミットが行われることに注意してください。

execute immediate 'truncate table tablename'; 
+0

ストアドプロシージャを使用して作成する必要はありません。Oracle Merge SQLを使用しています。このような状況から私を助けてください。 –

+0

@ NikhiK.Bansal - 上記はストアドプロシージャではありません。匿名ですブロック – GurV

+0

@ Gurv-私はこれをjavaコードから実行できますか、このブロックをデータベースのどこかに置く必要があります。 –

関連する問題