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

क्या कोई समझा सकता है कि MERGE कथन वास्तव में Oracle में क्या करता है?

<ब्लॉककोट>

किस प्रकार का जुड़ाव किया जाता है? मुझे लगता है कि यह पूर्ण बाहरी जुड़ाव है, क्या मैं सही हूँ?

नहीं, यह एक नियमित बाहरी जुड़ाव है। क्वेरी को यह जानने की आवश्यकता है कि लक्ष्य तालिका में पंक्तियाँ कब हैं जो स्रोत तालिका में भी हैं और जब स्रोत तालिका में ऐसे रिकॉर्ड हैं जो लक्ष्य तालिका में नहीं हैं। चूंकि क्वेरी को उन पंक्तियों का जवाब देने की आवश्यकता नहीं है जो लक्ष्य तालिका में हैं लेकिन स्रोत तालिका में नहीं हैं, इसलिए दोनों तरीकों से जाने के लिए बाहरी जुड़ाव की आवश्यकता नहीं है।

हालांकि, यदि कोई not matched . नहीं है, तो बाहरी जुड़ाव नहीं किया जाएगा खंड (जो पूरी तरह से मान्य है)। ऑप्टिमाइज़र यह जानने के लिए पर्याप्त स्मार्ट है कि उस स्थिति में, एक आंतरिक जुड़ाव पर्याप्त है।

<ब्लॉककोट>

WHEN MATCHED भाग के बारे में:क्या होता है जब t से एक पंक्ति s से कई पंक्तियों से मेल खाती है?

<स्ट्राइक>जब कई मैच होते हैं, तो प्रत्येक मैच के लिए अपडेट किया जाता है। इसका मतलब है कि जो भी अपडेट आखिरी बार आएगा वह कमिट में लिखा होगा। किसी आदेश को निर्देशित करने का कोई तरीका नहीं है, इसलिए इस मामले में अद्यतन का स्रोत प्रभावी रूप से यादृच्छिक है (मैचों के सेट से)।

जैसा कि @ विन्सेंट मालग्रेट ने बताया, यह गलत था। ऐसा लगता है कि Oracle एक "ORA-40926:स्रोत तालिका में पंक्तियों का एक स्थिर सेट प्राप्त करने में असमर्थ" त्रुटि उत्पन्न करेगा यदि कई मैच हैं।

<ब्लॉककोट>

जब मेल न खाने वाले भाग के संबंध में मेरा मानना ​​है कि इसका अर्थ है "जब s में एक पंक्ति का t में कोई पत्राचार नहीं है"। क्या मैं सही हूँ?

यह सही है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पीएल-एसक्यूएल में () कैसे काम करता है?

  2. Oracle डेटाबेस में उपयोगकर्ता-परिभाषित डेटाटाइप का उपयोग करके नेस्टेड तालिका कैसे बनाएं?

  3. Oracle एपेक्स में फ़ाइलें आयात करना wwv_flow_files का उपयोग करना

  4. oracle sql:यदि मौजूद है तो अपडेट करें और डालें

  5. Oracle PL/SQL - संग्रह (नेस्टेड टेबल्स)