Em primeiro lugar, acredito que sua tarefa pode ser implementada (e deve ser realmente) com SQL staight. Sem cursores sofisticados, sem loops, apenas seleciona, insere e atualiza. Eu começaria desarticulando seus dados de origem (não está claro se você tem chave primária para unir dois conjuntos, acho que sim):
Col0_PK Col1 Col2 Col3 Col4
----------------------------------------
Row1_val A B C D
Row2_val E F G H
Acima estão seus dados de origem. Usando
UNPIVOT
cláusula
convertemos para: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
Acho que você entendeu a ideia. Digamos que temos a tabela1 com um conjunto de dados e a mesma tabela estruturada2 com o segundo conjunto de dados. É uma boa ideia usar tabelas organizadas por índice.
A próxima etapa é comparar as linhas entre si e armazenar os detalhes das diferenças. 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');
E na última etapa, atualizamos a tabela de resumo de diferenças:
insert into diff_summary(summary_columns_here)
select diff_row_id, count(*) as diff_count
from diff_details
group by diff_row_id;
É apenas um rascunho para mostrar minha abordagem, tenho certeza de que há muito mais detalhes a serem levados em consideração. Para resumir, sugiro duas coisas:
UNPIVOT
dados- Usar
SQL
instruções em vez de cursores