2016-12-19 13 views
-2

ログを含む別のテーブルからテーブルを作成しようとしています。ログを含む別のテーブルからテーブルを作成する

たとえば、2つのテーブルおよびBがあります。

  • データがBからにコピーする必要があります
  • 両方のテーブルにidと呼ばつのプライマリキーがあります。
  • スクリプトは、一致する行があれば更新する必要があります。
  • スクリプトはBから欠落して行を挿入する必要がありテーブル内に見つからない場合

データは、15列を有する、約800 Kであると予想されます。

+1

質問を投稿する前に[ask]と[mcve]をご覧ください。試みや努力を示さずに「これを行う方法」のような質問は、通常はここで歓迎されないと考えてください。 – Aleksej

答えて

3

私は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命名されていると仮定します。

+0

ほぼ同じ時間でほとんど同じ答え。 – Kacper

+0

@_a_horse_with_no_name彼はターゲットテーブルに履歴を残したいと思うでしょう。 BIの用語でのSCD :) –

+0

REDOログとパフォーマンスに影響を与えるロギングとノーログリングについては、私は気にしません。https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID :5280714813869 – Moudiz

1
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のデータの一部のみを渡すべきです。どのくらい大きなlimitbulk collectのために設定する最適な時間を与えるかをテストする必要があります。

関連する問題