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

Oracle डेटाबेस में FORALL स्टेटमेंट का परिचय

फोरल स्टेटमेंट का उपयोग करके बल्क डेटा प्रोसेसिंग

मुझे पता है कि पिछला ट्यूटोरियल हमारी बल्क कलेक्ट सीरीज़ से एक त्वरित ब्रेक था। आखिर यह दर्शकों की मांग थी और इसे पूरा करना हमारा दायित्व था। लेकिन चिंता न करें हम ट्रैक पर वापस आ गए हैं। तो आइए Oracle डेटाबेस में FORALL स्टेटमेंट का उपयोग करके बल्क डेटा प्रोसेसिंग का परिचय देखें।

यदि आप नहीं जानते कि मैं किस ट्यूटोरियल के बारे में बात कर रहा हूं तो यहां देखें। तो चलिए अब विषय पर आते हैं।

एक FORALL कथन क्या है?

FORALL स्टेटमेंट PL/SQL इंजन से SQL इंजन के बैचों में DML स्टेटमेंट या MERGE स्टेटमेंट (यदि आप 11g या उससे अधिक का उपयोग कर रहे हैं) भेजकर एक अनुकूलित तरीके से बल्क डेटा को प्रोसेस करने में मदद करता है।

आप FORALL स्टेटमेंट को बल्क लूप कंस्ट्रक्शन के रूप में भी परिभाषित कर सकते हैं जो DML स्टेटमेंट या MERGE स्टेटमेंट को एक बार या कई बार एक साथ निष्पादित करता है।

थोक संग्रह क्वेरी को अनुकूलित करता है और संदर्भ स्विच को कम करके प्रदर्शन को बढ़ाता है। FORALL DML स्टेटमेंट जैसे इन्सर्ट, डिलीट, अपडेट या MERGE स्टेटमेंट के लिए भी यही काम करता है।

फोरल स्टेटमेंट का सिंटैक्स क्या है?

वाक्य रचना बहुत सरल है आइए एक नज़र डालते हैं।

FORALL index IN bound_clauses 
[SAVE EXCEPTION]
DML statement;

कहां:

सभी के लिए Oracle आरक्षित कीवर्ड है।

सूचकांक एक स्पष्ट रूप से परिभाषित लूप काउंटर है जिसे पीएल/एसक्यूएल इंजन द्वारा PLS_INTEGER के रूप में घोषित किया गया है। चूंकि इसे पीएल/एसक्यूएल इंजन द्वारा स्पष्ट रूप से परिभाषित किया गया है, इसलिए आपको इसे परिभाषित करने की आवश्यकता नहीं है। इंडेक्स का दायरा उस FORALL स्टेटमेंट तक सीमित है जिसमें इसे परिभाषित किया गया है।

बाउंड_क्लॉज वे क्लॉज हैं जो लूप पुनरावृत्तियों की संख्या को नियंत्रित करते हैं। साथ ही सूचकांक का मूल्य भी इस पर निर्भर करता है। Oracle PL/SQL में तीन प्रकार के बाउंड क्लॉज़ हैं जिनके बारे में हम बाद में इस ट्यूटोरियल में अलग से चर्चा करेंगे।

अपवाद सहेजें एक वैकल्पिक विकल्प है जो DML स्टेटमेंट के अपवाद का कारण होने पर भी FORALL स्टेटमेंट को चालू रखता है। ये अपवाद SQL%Bulk_Exceptions नामक कर्सर विशेषता में सहेजे जाते हैं।

जानकारी:
अपवाद सहेजें के कारण, अपवाद होने पर भी FORALL स्टेटमेंट अचानक से बाहर नहीं निकलता है। यह फॉर लूप पर FORALL स्टेटमेंट का एक फायदा है।

डीएमएल स्टेटमेंट :DML स्टेटमेंट कोई भी DML स्टेटमेंट हो सकता है जैसे INSERT, UPDATE या DELETE। अगर आप Oracle 11g या इसके बाद के संस्करण का उपयोग कर रहे हैं तो आप FORALL के साथ MERGE स्टेटमेंट का भी उपयोग कर सकते हैं। लेकिन आपको यह सुनिश्चित करने की आवश्यकता है कि आपका DML स्टेटमेंट या MERGE स्टेटमेंट इसके VALUES या WHERE क्लॉज में कम से कम एक संग्रह का संदर्भ दे रहा हो।

इसके अलावा फॉर लूप के विपरीत, FORALL स्टेटमेंट के साथ हम एक समय में केवल एक DML का उपयोग कर सकते हैं। यह FORALL की कमी है।

क्या FORALL एक लूप फॉर लूप की तरह है?

नहीं, हालांकि FORALL स्टेटमेंट संग्रह की सभी पंक्तियों के माध्यम से पुनरावृत्त होता है लेकिन यह फॉर लूप नहीं है। यदि आपने वाक्य रचना को ध्यान से देखा है तो आपने देखा होगा कि 'फॉर लूप' के विपरीत FORALL स्टेटमेंट का ब्लॉक न तो कीवर्ड LOOP से शुरू होता है और न ही कीवर्ड END LOOP से समाप्त होता है।

क्या हम FORALL का उपयोग करके एक बार में सम्मिलित करें और DML अपडेट करें निष्पादित कर सकते हैं?

नहीं, दुर्भाग्य से फॉर लूप विद फॉरल के विपरीत हम एक समय में एक से अधिक डीएमएल निष्पादित नहीं कर सकते हैं। इसका मतलब है कि आप या तो एक साथ इंसर्ट या अपडेट को एक साथ निष्पादित कर सकते हैं। यह FORALL स्टेटमेंट की कमी है।

कर्सर विशेषता SQL%Bulk_Exceptions क्या है?

कर्सर विशेषता SQL% Bulk_Exceptions अभिलेखों का एक संग्रह है जिसमें दो फ़ील्ड Error_Index और Error_Code हैं। Error_Index FORALL स्टेटमेंट के पुनरावृत्तियों की संख्या को संग्रहीत करता है जिसके दौरान अपवाद हुआ है। दूसरी ओर Error_Code उस अपवाद कोड को संग्रहीत करता है जो उठाए गए अपवाद के अनुरूप होता है।

क्या हम देख सकते हैं कि FORALL स्टेटमेंट के निष्पादन के दौरान कितने अपवाद हुए हैं?

SQL%BULK_EXCEPTION.COUNT का उपयोग करके आप आसानी से जांच सकते हैं कि FORALL स्टेटमेंट के निष्पादन के दौरान कितने अपवाद उठाए गए हैं।

वे बाध्य खंड क्या हैं? हमें उनके बारे में कुछ बताएं।

जैसा कि ऊपर उल्लेख किया गया है, बाउंड क्लॉज लूप इंडेक्स के मूल्य और FORALL स्टेटमेंट के पुनरावृत्तियों की संख्या को नियंत्रित करते हैं। तीन प्रकार के बाउंड क्लॉज़ हैं जिनका उपयोग Oracle डेटाबेस में FORALL स्टेटमेंट के साथ किया जा सकता है। ये हैं:

  1. लोअर और अपर बाउंड
  2. सूचकांक और
  3. के मान

निचली और ऊपरी सीमा :फॉर लूप के समान, इस बाउंड क्लॉज में आपको संदर्भित संग्रह के लगातार इंडेक्स नंबरों की वैध शुरुआत और समाप्ति निर्दिष्ट करनी होगी।

डीएमएल स्टेटमेंट में संदर्भित संग्रह (संग्रहों) की संख्या के लिए इस बाउंड क्लॉज के साथ लगातार इंडेक्स नंबरों की एक वैध श्रेणी निर्दिष्ट करना आवश्यक है। हालाँकि, त्रुटि की संभावना है यदि इस खंड के साथ संदर्भित संग्रह विरल पाया जाता है। आपको जो त्रुटि मिलेगी वह यह है:

ORA-22160: element at index [3] does not exist

यदि आपका संदर्भित संग्रह विरल है और आप Oracle 10g या इसके बाद के संस्करण का उपयोग कर रहे हैं, तो आप अन्य दो विकल्पों का उपयोग करना चाह सकते हैं, जो 'इंडिसेस-ऑफ़' और 'वैल्यूज़-ऑफ़' हैं।

सूचकांक :दूसरा बाउंड क्लॉज जो हमारे लिए उपलब्ध है वह है 'इंडिसेस ऑफ'। यह बाउंड क्लॉज हमारे FORALL स्टेटमेंट को एक साहचर्य सरणी या नेस्टेड टेबल जैसे विरल संग्रह के माध्यम से लूप करने में सक्षम बनाता है।

सुझाया गया पठन:PL/SQL संग्रह का परिचय

के मूल्य :तीसरा बाध्य खंड का मान है। विकल्प के VALUES यह स्पष्ट करते हैं कि लूप काउंटर के निर्दिष्ट संग्रह के तत्वों का मान FORALL स्टेटमेंट में मानों का आधार है। मूल रूप से, यह संग्रह अनुक्रमणिका का एक समूह है जिसके माध्यम से FORALL कथन लूप कर सकता है। इसके अलावा, इन अनुक्रमणिकाओं को अद्वितीय होने की आवश्यकता नहीं है और साथ ही इन्हें मनमाने क्रम में सूचीबद्ध किया जा सकता है।

यदि आप वीडियो ट्यूटोरियल देखकर जल्दी सीखते हैं तो यहां एक फॉरल स्टेटमेंट के बारे में विस्तार से बताया गया है।

भविष्य के ट्यूटोरियल्स में हम सीखेंगे कि इन सभी बाउंड क्लॉज़ को FORALL स्टेटमेंट के साथ कैसे उपयोग किया जाए, इसलिए बने रहें। नवीनतम अपडेट के लिए आप मेरे YouTube चैनल को सब्सक्राइब कर सकते हैं और मेरे सोशल मीडिया पर मुझे फॉलो कर सकते हैं।

धन्यवाद और आपका दिन मंगलमय हो!


  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 में PLS-00323 त्रुटि का समाधान करें

  2. ओरेकल में खाली स्ट्रिंग

  3. Oracle में एकाधिक पंक्तियाँ सम्मिलित करने के 4 तरीके

  4. गतिशील Oracle Pivot_In_Clause

  5. प्राथमिक के बजाय दो विदेशी कुंजी