まず第一に、あなたのタスクは安定したSQLで実装できる(そして実際に実装されるべきである)と私は信じています。派手なカーソルやループはなく、選択、挿入、更新するだけです。まず、ソースデータのピボットを解除することから始めます(2つのセットを結合するための主キーがあるかどうかは不明ですが、そうだと思います):
Col0_PK Col1 Col2 Col3 Col4
----------------------------------------
Row1_val A B C D
Row2_val E F G H
上記はソースデータです。 UNPIVOT
を使用する 条項
次のように変換します:
Col0_PK Col_Name Col_Value
------------------------------
Row1_val Col1 A
Row1_val Col2 B
Row1_val Col3 C
Row1_val Col4 D
Row2_val Col1 E
Row2_val Col2 F
Row2_val Col3 G
Row2_val Col4 H
私はあなたがその考えを理解したと思います。 1つのデータセットを持つtable1と、2番目のデータセットを持つ同じ構造化table2があるとします。インデックスで整理されたテーブルを使用することをお勧めします。
次のステップは、行を相互に比較し、差異の詳細を保存することです。次のようなもの:
insert into diff_details(some_service_info_columns_here)
select some_service_info_columns_here_along_with_data_difference
from table1 t1 inner join table2 t2
on t1.Col0_PK = t2.Col0_PK
and t1.Col_name = t2.Col_name
and nvl(t1.Col_value, 'Dummy1') <> nvl(t2.Col_value, 'Dummy2');
そして最後のステップで、差異の要約テーブルを更新します:
insert into diff_summary(summary_columns_here)
select diff_row_id, count(*) as diff_count
from diff_details
group by diff_row_id;
私のアプローチを示すのは大まかなドラフトです。もっと多くの詳細を考慮に入れる必要があると確信しています。要約すると、私は2つのことを提案します:
-
UNPIVOT
データ -
SQL
を使用する カーソルの代わりにステートメント