Zunächst einmal glaube ich, dass Ihre Aufgabe mit einfachem SQL implementiert werden kann (und sollte). Keine ausgefallenen Cursor, keine Schleifen, nur Auswahlen, Einfügungen und Aktualisierungen. Ich würde mit dem Entpivotieren Ihrer Quelldaten beginnen (es ist nicht klar, ob Sie einen Primärschlüssel haben, um zwei Sätze zu verbinden, ich denke, Sie haben es):
Col0_PK Col1 Col2 Col3 Col4
----------------------------------------
Row1_val A B C D
Row2_val E F G H
Oben sind Ihre Quelldaten. Verwenden von UNPIVOT
Klausel
wir wandeln es um in:
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
Ich denke, du verstehst es. Angenommen, wir haben Tabelle1 mit einem Datensatz und die gleiche strukturierte Tabelle2 mit dem zweiten Datensatz. Es ist eine gute Idee, indexorganisierte Tabellen zu verwenden.
Der nächste Schritt besteht darin, Zeilen miteinander zu vergleichen und Differenzdetails zu speichern. Etwas wie:
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');
Und im letzten Schritt aktualisieren wir die Übersichtstabelle der Unterschiede:
insert into diff_summary(summary_columns_here)
select diff_row_id, count(*) as diff_count
from diff_details
group by diff_row_id;
Es ist nur ein grober Entwurf, um meinen Ansatz zu zeigen, ich bin sicher, es sollten noch viel mehr Details berücksichtigt werden. Zusammenfassend schlage ich zwei Dinge vor:
UNPIVOT
Daten- Verwenden Sie
SQL
Anweisungen anstelle von Cursorn