Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ओरेकल में बड़ी मात्रा में डेटा के साथ एक ही तालिका में फ़ील्ड तुलना करने का सबसे तेज़ तरीका

सबसे पहले मेरा मानना ​​​​है कि आपका कार्य स्थिर एसक्यूएल के साथ लागू किया जा सकता है (और वास्तव में होना चाहिए)। कोई फैंसी कर्सर नहीं, कोई लूप नहीं, बस चयन करता है, सम्मिलित करता है और अपडेट करता है। मैं आपके स्रोत डेटा को अनपिवट करने के साथ शुरू करूंगा (यह स्पष्ट नहीं है कि आपके पास दो सेटों में शामिल होने के लिए प्राथमिक कुंजी है, मुझे लगता है कि आप करते हैं):

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;

मेरा दृष्टिकोण दिखाने के लिए यह सिर्फ एक मोटा मसौदा है, मुझे यकीन है कि और अधिक विवरणों को ध्यान में रखा जाना चाहिए। संक्षेप में मैं दो बातें सुझाता हूं:

  1. UNPIVOT डेटा
  2. SQL का प्रयोग करें कर्सर के बजाय बयान


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle में अनुक्रम के मान को रीसेट करने की आवश्यकता है

  2. ओरेकल पीएल/एसक्यूएल प्रक्रिया को डीडीएल के साथ तत्काल निष्पादित करने के लिए AUTHID CURRENT_USER की आवश्यकता है

  3. Oracle दिनांक स्वरूप

  4. ट्रांजेक्शनस्कोप के अंदर बैच प्रविष्टि करते समय ORA-00604 त्रुटि

  5. Oracle में महीने के हिसाब से ग्रुप करें