現在、ファイルからテーブルにデータを挿入しています。テーブルに挿入する前にデータをフォーマットします(タブを削除する/キャリッジリターン/特定のテキストの文字コードを取得するなど)。まず、レコードが存在するかどうかを確認し、存在する場合は更新する必要があります。そうでない場合は、そのレコードをテーブルに挿入する必要があります。
私が抱えている問題は、非常に長い時間がかかることです。私は 2 つのファイルを持っています。1 つは 500k レコード未満で、もう 1 つは 4mil を超えています。一括収集を実行して両方を実行できる場合は?
例えば
open c_cur;
loop
fetch c_cur bulk collect into examp limit 50000;
exit when limit.count = 0
forall x in 1..limit.count
update table1
set...
where...
if sql%notfound then
insert into table1
values (...)
end if;
commit;
end loop;
close c_cur;
これは可能ですか?
また、ステージング テーブルをセットアップしてそこにファイルをダンプし、そこから作業するという話も聞きました。それはより良い選択肢ですか?これにより、パフォーマンスがどの程度向上しますか?
また、ファイルからのテーブルでマージを実行しないことをお勧めします。
ありがとう。