insert
次の簡単な句を使用して、数百万行を挿入しています。
insert into DEST_TABLE
select *
from SRC_TABLE
ただし、挿入中に重複が発生する可能性があり、エラーが発生し、操作全体が終了します。
挿入操作を最初から最後まで実行し、重複した挿入エラー(別名)から中断しない方法はありますか?重複する挿入エラーを無視して挿入しませんか?
問題をすべて回避し、事前に除外することをお勧めします。
insert into DEST_TABLE
select *
from SRC_TABLE
EXCEPT
select *
from DEST_TABLE
これらは、重複行を処理する方法です。
制約を削除して行を挿入します。次に、重複を削除するには、オプション ignore_dup_row を使用してテーブルにクラスター化インデックスを作成します
すべての制約を削除し、オプション ignore_dup_row を使用して、テーブルにクラスター化されたインデックスを作成します。行が重複している場合は挿入されません。
たぶん、どこの条項が良いでしょうか?
insert into DEST_TABLE
select *
from SRC_TABLE S
where not exists
(
select 1
from DEST_TABLE D
where D.id=S.id
)
重複挿入エラーは、の制約からのみ発生する可能性がありますDEST_TABLE
。
したがって、DEST_TABLEの制約を削除し、データを挿入してクリーンアップし、制約を元に戻します。
にすでにデータがある場合、これは問題になる場合がありますDEST_TABLE
。
SELECT
もう1つの(より良い)解決策は、句を変更することにより、重複することなくデータを取得することです。