Prima di tutto credo che il tuo compito possa essere implementato (e dovrebbe essere effettivamente) con SQL costante. Nessun cursore di fantasia, nessun loop, solo selezioni, inserimenti e aggiornamenti. Inizierei con l'annullamento del pivot dei dati di origine (non è chiaro se hai la chiave primaria per unire due set, immagino che tu lo faccia):
Col0_PK Col1 Col2 Col3 Col4
----------------------------------------
Row1_val A B C D
Row2_val E F G H
Sopra sono i tuoi dati di origine. Utilizzo di UNPIVOT
clausola
lo convertiamo 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
Penso che tu abbia l'idea. Supponiamo di avere table1 con un set di dati e la stessa table2 strutturata con il secondo set di dati. È una buona idea utilizzare tabelle organizzate per indici.
Il passaggio successivo consiste nel confrontare le righe tra loro e memorizzare i dettagli della differenza. Qualcosa come:
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');
E nell'ultimo passaggio aggiorniamo la tabella di riepilogo delle differenze:
insert into diff_summary(summary_columns_here)
select diff_row_id, count(*) as diff_count
from diff_details
group by diff_row_id;
È solo una bozza per mostrare il mio approccio, sono sicuro che dovrebbero essere presi in considerazione molti più dettagli. Per riassumere ti suggerisco due cose:
UNPIVOT
dati- Usa
SQL
istruzioni al posto dei cursori