アプリケーション内の一部のテーブルを、毎週または隔週更新するいくつかの他のウェアハウステーブルから更新する必要があります。私はそれらに基づいて私のテーブルを更新する必要があります。そして、これらは別のテーブルに外部キーを持っています。だから私はテーブルを切り捨てて、毎回データ全体を再挿入することはできません。だから私はデルタを取って、それに応じて、変更されないいくつかの主キー列に基づいて更新する必要があります。このアプローチを実装する方法に関するいくつかのインプットが必要です。Oracle 12c - ウェアハウステーブルのデータに基づいてテーブル内のデータを更新する
私のアプローチ:
これらのテーブル、ビューの最終更新時刻を確認します。
最新のものであれば、テーブルとウェアハウステーブルのプライマリキーに基づいて各行を比較してください。
異なる場合は、各列を更新してください。
列に変更がない場合は何も行いません。
新しいレコードがある場合は挿入します。
私の質問:
どうすれば実装できますか? PL/SQLコードを書くことは、それが有効かつ効率的な方法ですか?予想されるレコード数は約800Kです。
サンプルコードまたはリンクをご記入ください。
関連する行を判別するために使用できる、他のウェアハウスの各レコードにはタイムスタンプはありません。単一のマージステートメントが試行する最初の方法になります。次に、並列化を試みてください。 merge/* + parallel */ – user2672165
質問は広範囲(IMHO)に答えることに関連しています。最良のソリューションは、構造、制約、行の数とサイズに応じて、テーブルごとに異なるアプローチを使用することもできます。例として使用する1つまたは2つのテーブルを選択し、構造、サイズ、インデックスを投稿することができますコードを改善するためのヘルプが必要です。また、800Kほどではないと考えてください。 – Aleksej
宛先テーブルはソーステーブルの単純なコピーですか?宛先テーブルを更新する必要がありましたか、それとも単純に読み取り専用ですか? Enterprise Editionを使用している場合は、マテリアライズド・ビューが適しています。https://docs.oracle.com/database/121/REPLN/repmview.htm#REPLN003 –