Allereerst geloof ik dat je taak kan worden geïmplementeerd (en eigenlijk zou moeten zijn) met vaste SQL. Geen fancy cursors, geen loops, gewoon selecteren, invoegen en bijwerken. Ik zou beginnen met het ongedaan maken van de draaiing van je brongegevens (het is niet duidelijk of je een primaire sleutel hebt om twee sets samen te voegen, ik denk dat je dat wel doet):
Col0_PK Col1 Col2 Col3 Col4
----------------------------------------
Row1_val A B C D
Row2_val E F G H
Hierboven staan uw brongegevens. UNPIVOT
gebruiken clausule
we zetten het om naar:
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
Ik denk dat je het idee snapt. Stel dat we tabel1 hebben met één set gegevens en dezelfde gestructureerde tabel2 met de tweede set gegevens. Het is een goed idee om index-georganiseerde tabellen te gebruiken.
De volgende stap is het vergelijken van rijen met elkaar en het opslaan van verschildetails. Iets als:
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');
En bij de laatste stap werken we de samenvattende tabel met verschillen bij:
insert into diff_summary(summary_columns_here)
select diff_row_id, count(*) as diff_count
from diff_details
group by diff_row_id;
Het is slechts een ruwe schets om mijn aanpak te laten zien, ik weet zeker dat er met veel meer details rekening moet worden gehouden. Om samen te vatten stel ik twee dingen voor:
UNPIVOT
gegevens- Gebruik
SQL
uitspraken in plaats van cursors