Především se domnívám, že váš úkol může být implementován (a měl by být ve skutečnosti) pomocí přímého SQL. Žádné ozdobné kurzory, žádné smyčky, pouze vybírá, vkládá a aktualizuje. Začal bych zrušením pivotování vašich zdrojových dat (není jasné, zda máte primární klíč ke spojení dvou sad, myslím, že ano):
Col0_PK Col1 Col2 Col3 Col4
----------------------------------------
Row1_val A B C D
Row2_val E F G H
Nahoře jsou vaše zdrojová data. Pomocí UNPIVOT
doložka
převedeme na:
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
Myslím, že chápete. Řekněme, že máme tabulku1 s jednou sadou dat a stejnou strukturovanou tabulku2 s druhou sadou dat. Je dobré používat indexově organizované tabulky.
Dalším krokem je vzájemné porovnání řádků a uložení podrobností o rozdílech. Něco jako:
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');
A v posledním kroku aktualizujeme souhrnnou tabulku rozdílů:
insert into diff_summary(summary_columns_here)
select diff_row_id, count(*) as diff_count
from diff_details
group by diff_row_id;
Je to jen hrubý návrh, který ukazuje můj přístup, jsem si jistý, že je třeba vzít v úvahu mnohem více detailů. Abych to shrnul, navrhuji dvě věci:
UNPIVOT
údaje- Použijte
SQL
příkazy namísto kurzorů