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

Oracle डेटाबेस में INDICES-OF के बाउंड क्लॉज के साथ FORALL स्टेटमेंट

इंडिसेस ऑफ बाउंड क्लॉज के साथ FORALL स्टेटमेंट क्यों?

जब तक हम सघन संग्रह का संदर्भ नहीं दे रहे हैं, तब तक लोअर और अपर बाउंड क्लॉज के साथ FORALL स्टेटमेंट बल्क डेटा प्रोसेसिंग का सबसे आसान तरीका है। जब विरल संग्रह की बात आती है, तो निचला और ऊपरी बाउंड क्लॉज मजबूत नहीं होता है। साथ ही, दुर्भाग्य से वास्तविक जीवन परिदृश्य में सघन संग्रह के साथ काम करने की संभावना विरल संग्रह के साथ काम करने की तुलना में बहुत कम है।

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

FORALL स्टेटमेंट के लोअर और अपर बाउंड क्लॉज की कमी यह है कि इसका उपयोग विरल संग्रह के साथ नहीं किया जा सकता है। 'इंडिसेस-ऑफ़ . जैसे विकल्पों का उपयोग करके इस कमी को आसानी से दूर किया जा सकता है ' या 'मूल्य-के ' बाध्य उपवाक्य। यह ट्यूटोरियल पहले वाले विकल्प के बारे में है।

इंडिसेस-ऑफ़ बाउंड क्लॉज़

लोअर और अपर बाउंड क्लॉज के समान INDICES-OF क्लॉज हमें संग्रह के माध्यम से पुनरावृति करके बल्क डेटा प्रोसेसिंग में मदद करता है। अंतर केवल इतना है कि INDICES OF क्लॉज का उपयोग करके हम घने और विरल संग्रह के माध्यम से पुनरावृति कर सकते हैं। जबकि लोअर और अपर बाउंड क्लॉज केवल सघन संग्रह के साथ काम करता है।

इंडिसेस ऑफ बाउंड क्लॉज का सिंटैक्स

FORALL index IN INDICES OF collection_variable
[SAVE EXCEPTION]
DML statements; 

कहां:

सभी के लिए एक Oracle डेटाबेस आरक्षित कीवर्ड है जिसके बाद एक इंडेक्स. . है यह सूचकांक एक स्पष्ट रूप से परिभाषित लूप काउंटर है जिसे पीएल/एसक्यूएल इंजन द्वारा घोषित किया जाता है। उसके बाद आपको एक और कीवर्ड लिखना है जो IN है। IN कीवर्ड के बाद हमारा बाउंड क्लॉज है जो INDICES OF है।

आरक्षित वाक्यांश 'INDICES OF' लिखने के ठीक बाद हमें उस संग्रह का संग्रह चर निर्दिष्ट करना होगा जिसका डेटा हम उपयोग करना चाहते हैं। हम पहले से ही जानते हैं कि हमने प्रोग्राम में संग्रह को इसके संग्रह चर के माध्यम से संदर्भित किया है। उसके बाद हमारे पास सेव एक्सेप्शन विकल्प है यह एक वैकल्पिक विकल्प है। फिर हमारे पास एक DML स्टेटमेंट होता है, यह कोई भी DML स्टेटमेंट या MERGE स्टेटमेंट हो सकता है।

सुनिश्चित करें कि FORALL के साथ आप जिस DML स्टेटमेंट या MERGE स्टेटमेंट का उपयोग कर रहे हैं, उसे एक संग्रह का संदर्भ देना चाहिए। साथ ही FORALL स्टेटमेंट एक बार में केवल एक DML या MERGE स्टेटमेंट को प्रोसेस कर सकता है।

इंडिसेस ऑफ बाउंड क्लॉज का उदाहरण

यहां हम FORALL स्टेटमेंट के साथ INDICES OF बाउंड क्लॉज का प्रदर्शन देखेंगे। यहां हम डेटा को पहले से शुरू की गई स्पार्स नेस्टेड टेबल से लाएंगे और इसे एक टेबल में स्टोर करेंगे।

जैसा कि हमने पिछले ट्यूटोरियल में सीखा था कि FORALL स्टेटमेंट संग्रह से डेटा लेता है और उसे एक टेबल में स्टोर करता है। इस प्रकार हम पहले एक टेबल बनाएंगे।

SET SERVEROUTPUT ON;
CREATE TABLE tut_78(
    mul_tab NUMBER(5)
);

प्रदर्शन को आसान रखने के लिए हमने tut_78 नाम से एक बहुत ही सरल तालिका बनाई। इस तालिका में NUMBER डेटा प्रकार का केवल एक कॉलम mul_tab है।

DECLARE
    TYPE my_nested_table IS TABLE OF number;
    var_nt my_nested_table := my_nested_table (9,18,27,36,45,54,63,72,81,90);
    --Another variable for holding total number of record stored into the table 
    tot_rec NUMBER;
BEGIN
    var_nt.DELETE(3, 6);
    
    FORALL idx IN INDICES OF var_nt
        INSERT INTO tut_78 (mul_tab) VALUES (var_nt(idx));
        
    SELECT COUNT (*) INTO tot_rec FROM tut_78;
    DBMS_OUTPUT.PUT_LINE ('Total records inserted are '||tot_rec);
END;
/

आप वीडियो ट्यूटोरियल में उपरोक्त कोड की विस्तृत व्याख्या पा सकते हैं। लेकिन फिर भी यहां एक त्वरित स्पष्टीकरण भी है।

उपरोक्त PL/SQL ब्लॉक का घोषणा खंड

यहां इस खंड में हमने सबसे पहले 'my_nested_table . नाम से एक नेस्टेड तालिका बनाई है '। यह NUMBER डेटाटाइप का डेटा धारण कर रहा है। फिर हमने इसके संग्रह चर को 'var_nt . घोषित किया '। इसका उपयोग करते हुए हमने अपने संग्रह में 10 अंकीय तत्वों को संग्रहीत करके पहले 10 इंडेक्स को इनिशियलाइज़ किया।

नेस्टेड टेबल और उसके संग्रह चर के अलावा हमने एक अतिरिक्त चर भी घोषित किया 'tot_rec ' संख्या डेटाटाइप का। इस चर का उपयोग तालिका में संग्रहीत किए जाने वाले डेटा की कुल संख्या को रखने के लिए किया जाएगा।

निष्पादन अनुभाग

यदि आप निष्पादन अनुभाग में पहले कथन को देखते हैं। आप पाएंगे कि संग्रह विधि DELETE का उपयोग करके मैंने इंडेक्स 3 से इंडेक्स 6 तक डेटा हटा दिया है। इसका मतलब है कि अब हमारे संग्रह की अनुक्रमणिका अनुक्रमिक रूप से पॉप्युलेट नहीं होती है। इससे हमारे संग्रह की प्रकृति DENSE . से बदल जाती है करने के लिए SPARSE.

संग्रह विधि के ठीक बाद DELETE कॉल हमारे पास INDICES OF बाउंड क्लॉज के साथ हमारा FORALL स्टेटमेंट है। इस कथन का उपयोग करके हम संग्रह 'my_nested_table' को तालिका tut_78 में सम्मिलित कर रहे हैं।

फिर हमारे पास SELECT-INTO स्टेटमेंट होता है। यह कथन तालिका tut_78 में डाली गई पंक्तियों की कुल संख्या लौटा रहा है और उस मान को चर tot_rec में संग्रहीत कर रहा है। फिर DBMS_OUTPUT कथन का उपयोग करके हम उपयोगकर्ता को एक स्वरूपित स्ट्रिंग के साथ चर tot_rec में संग्रहीत मान को वापस प्रदर्शित कर रहे हैं।

मैं आपको उपरोक्त चर्चा किए गए कोड की गहन व्याख्या के लिए मेरे YouTube चैनल पर इस ट्यूटोरियल को देखने का अत्यधिक सुझाव देता हूं। साथ ही, अधिक दिलचस्प ट्यूटोरियल के लिए चैनल को सब्सक्राइब करना न भूलें।

धन्यवाद कि बाध्य खंड के सूचकांक के साथ FORALL स्टेटमेंट का उपयोग करके बल्क डेटा प्रोसेसिंग कैसे करें, इस पर PL/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. पीएल/एसक्यूएल में फाइल से बीएलओबी कैसे प्राप्त करें?

  2. एसक्यूएल इन क्लॉज 1000 आइटम सीमा

  3. यह निर्धारित करना कि Oracle में फ़ील्ड डेटा संख्या प्रकार का है

  4. pl/sql प्रक्रिया में चर घोषित करते समय वाक्यविन्यास त्रुटि

  5. Oracle डेटाबेस में SET DEFINE OFF का उपयोग कब या क्यों करें?