ログを含む別のテーブルからテーブルを作成しようとしています。ログを含む別のテーブルからテーブルを作成する
たとえば、2つのテーブルおよびBがあります。
- データがBからにコピーする必要があります
- 両方のテーブルに
id
と呼ばつのプライマリキーがあります。 - スクリプトは、一致する行があれば更新する必要があります。
- スクリプトはBから欠落して行を挿入する必要がありテーブル内に見つからない場合
データは、15列を有する、約800 Kであると予想されます。
ログを含む別のテーブルからテーブルを作成しようとしています。ログを含む別のテーブルからテーブルを作成する
たとえば、2つのテーブルおよびBがあります。
id
と呼ばつのプライマリキーがあります。データは、15列を有する、約800 Kであると予想されます。
私はmerge
を使用し、あなたは「ログを含む」と何を意味するかわかりませんが、別のテーブルから/更新を挿入するには:
merge into a
using b on (b.id = a.id)
when matched then update
set col1 = b.col1,
col2 = b.col2
when not matched then insert (id, col1, col2)
values (b.id, b.col1, col2);
これは、PKは両方のテーブルのid
命名されていると仮定します。
merge into tableA a
using tableB b
on (a.id = b.id)
when matched then update set
--list columns here
when not matched then insert
--list columns to insert here
;
800kは、1回のトランザクションで挿入するには多すぎるはありません。あまりにも多い場合は、bulk collect
のカーソルを使用し、いくつかのステップで分割マージを行い、using
のデータの一部のみを渡すべきです。どのくらい大きなlimit
bulk collect
のために設定する最適な時間を与えるかをテストする必要があります。
質問を投稿する前に[ask]と[mcve]をご覧ください。試みや努力を示さずに「これを行う方法」のような質問は、通常はここで歓迎されないと考えてください。 – Aleksej