Przede wszystkim wierzę, że Twoje zadanie może zostać zrealizowane (i powinno być) za pomocą prostego SQL. Bez wymyślnych kursorów, bez pętli, po prostu zaznacza, wstawia i aktualizuje. Zacząłbym od unpivotingu twoich danych źródłowych (nie jest jasne, czy masz klucz podstawowy do połączenia dwóch zestawów, myślę, że tak):
Col0_PK Col1 Col2 Col3 Col4
----------------------------------------
Row1_val A B C D
Row2_val E F G H
Powyżej znajdują się Twoje dane źródłowe. Korzystanie z UNPIVOT
klauzula
konwertujemy to na:
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
Myślę, że masz pomysł. Załóżmy, że mamy table1 z jednym zestawem danych i taką samą ustrukturyzowaną tabelę2 z drugim zestawem danych. Dobrym pomysłem jest użycie tabel zorganizowanych według indeksu.
Następnym krokiem jest porównanie wierszy ze sobą i przechowywanie szczegółów różnic. Coś takiego:
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');
W ostatnim kroku aktualizujemy tabelę podsumowującą różnice:
insert into diff_summary(summary_columns_here)
select diff_row_id, count(*) as diff_count
from diff_details
group by diff_row_id;
To tylko wstępny szkic, aby pokazać moje podejście, jestem pewien, że należy wziąć pod uwagę znacznie więcej szczegółów. Podsumowując, proponuję dwie rzeczy:
UNPIVOT
dane- Użyj
SQL
oświadczenia zamiast kursorów