सबसे पहले मेरा मानना है कि आपका कार्य स्थिर एसक्यूएल के साथ लागू किया जा सकता है (और वास्तव में होना चाहिए)। कोई फैंसी कर्सर नहीं, कोई लूप नहीं, बस चयन करता है, सम्मिलित करता है और अपडेट करता है। मैं आपके स्रोत डेटा को अनपिवट करने के साथ शुरू करूंगा (यह स्पष्ट नहीं है कि आपके पास दो सेटों में शामिल होने के लिए प्राथमिक कुंजी है, मुझे लगता है कि आप करते हैं):
Col0_PK Col1 Col2 Col3 Col4
----------------------------------------
Row1_val A B C D
Row2_val E F G H
ऊपर आपका स्रोत डेटा है। UNPIVOT
का उपयोग करना खंड
हम इसे इसमें रूपांतरित करते हैं:
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
मुझे लगता है कि आपको विचार समझ आ गया है। मान लें कि हमारे पास डेटा के एक सेट के साथ तालिका 1 और डेटा के दूसरे सेट के साथ समान संरचित तालिका 2 है। अनुक्रमणिका-संगठित तालिकाओं का उपयोग करना एक अच्छा विचार है।
अगला चरण पंक्तियों की एक दूसरे से तुलना करना और अंतर विवरण संग्रहीत करना है। कुछ इस तरह:
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');
और अंतिम चरण में हम अंतर सारांश तालिका को अपडेट करते हैं:
insert into diff_summary(summary_columns_here)
select diff_row_id, count(*) as diff_count
from diff_details
group by diff_row_id;
मेरा दृष्टिकोण दिखाने के लिए यह सिर्फ एक मोटा मसौदा है, मुझे यकीन है कि और अधिक विवरणों को ध्यान में रखा जाना चाहिए। संक्षेप में मैं दो बातें सुझाता हूं:
UNPIVOT
डेटाSQL
का प्रयोग करें कर्सर के बजाय बयान