En primer lugar, creo que su tarea se puede implementar (y debería serlo) con SQL directo. Sin cursores sofisticados, sin bucles, solo selecciona, inserta y actualiza. Comenzaría con la rotación de sus datos de origen (no está claro si tiene una clave principal para unir dos conjuntos, supongo que sí):
Col0_PK Col1 Col2 Col3 Col4
----------------------------------------
Row1_val A B C D
Row2_val E F G H
Arriba están sus datos de origen. Usando UNPIVOT
cláusula
lo convertimos a:
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
Creo que entiendes la idea. Digamos que tenemos table1 con un conjunto de datos y la misma table2 estructurada con el segundo conjunto de datos. Es una buena idea utilizar tablas organizadas por índices.
El siguiente paso es comparar las filas entre sí y almacenar los detalles de las diferencias. Algo como:
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');
Y en el último paso actualizamos la tabla de resumen de diferencias:
insert into diff_summary(summary_columns_here)
select diff_row_id, count(*) as diff_count
from diff_details
group by diff_row_id;
Es solo un borrador para mostrar mi enfoque, estoy seguro de que hay muchos más detalles que deben tenerse en cuenta. Para resumir sugiero dos cosas:
UNPIVOT
datos- Usar
SQL
declaraciones en lugar de cursores