Først og fremmest tror jeg, at din opgave kan implementeres (og faktisk burde være det) med staight SQL. Ingen smarte markører, ingen loops, bare markeringer, indsættelser og opdateringer. Jeg ville starte med at fjerne pivotering af dine kildedata (det er ikke klart, om du har primærnøgle til at forbinde to sæt, det tror jeg du gør):
Col0_PK Col1 Col2 Col3 Col4
----------------------------------------
Row1_val A B C D
Row2_val E F G H
Ovenfor er dine kildedata. Brug af UNPIVOT
klausul
vi konverterer det til:
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
Jeg tror, du forstår ideen. Lad os sige, at vi har tabel1 med et sæt data og den samme strukturerede tabel2 med det andet sæt data. Det er en god idé at bruge indeksorganiserede tabeller.
Næste trin er at sammenligne rækker med hinanden og gemme forskelsdetaljer. Noget som:
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');
Og på det sidste trin opdaterer vi forskelsoversigtstabel:
insert into diff_summary(summary_columns_here)
select diff_row_id, count(*) as diff_count
from diff_details
group by diff_row_id;
Det er bare et groft udkast til at vise min tilgang, jeg er sikker på, at der er mange flere detaljer, der skal tages i betragtning. For at opsummere foreslår jeg to ting:
UNPIVOT
data- Brug
SQL
udsagn i stedet for markører