Oracle PL / SQL BULK COLLECT: FORALL उदाहरण

विषय - सूची:

Anonim

BULK COLLECT क्या है?

BULK COLLECT SQL और PL / SQL इंजन के बीच संदर्भ स्विच को कम कर देता है और SQL इंजन को एक ही बार में रिकॉर्ड लाने की अनुमति देता है।

Oracle PL / SQL एक-एक करके लाने के बजाय थोक में रिकॉर्ड लाने की कार्यक्षमता प्रदान करता है। इस थोक संग्रह का उपयोग 'चयन' कथन में थोक में या कर्सर को लाने के लिए रिकॉर्ड को पॉप्युलेट करने के लिए किया जा सकता है। चूँकि BULK COLLECT BULK में रिकॉर्ड प्राप्त करता है, इसलिए INTO क्लॉज़ में हमेशा एक संग्रह प्रकार चर होना चाहिए। BULK COLLECT का उपयोग करने का मुख्य लाभ यह है कि डेटाबेस और PL / SQL इंजन के बीच की बातचीत को कम करके प्रदर्शन को बढ़ाता है।

वाक्य - विन्यास:

SELECT  BULK COLLECT INTO bulk_varaible FROM 
;FETCH  BULK COLLECT INTO ;

उपरोक्त सिंटैक्स में, BULK COLLECT का उपयोग 'SELECT' और 'FETCH' स्टेटमेंट के डेटा को इकट्ठा करने में किया जाता है।

इस ट्यूटोरियल में आप सीखेंगे-

  • फॉर्ल क्लॉज
  • सीमा खंड
  • बल्क संकलन विशेषताएँ

फॉर्ल क्लॉज

FORALL बल्क में डेटा पर DML संचालन करने की अनुमति देता है। यह लूप स्टेटमेंट के समान है, केवल लूप के अलावा रिकॉर्ड-स्तर पर चीजें होती हैं, जबकि फॉर्ल में कोई लूप अवधारणा नहीं है। इसके बजाय दिए गए रेंज में मौजूद संपूर्ण डेटा को उसी समय संसाधित किया जाता है।

वाक्य - विन्यास:

FORALL in;

उपरोक्त सिंटैक्स में, निम्न और उच्च श्रेणी के बीच मौजूद संपूर्ण डेटा के लिए दिए गए DML ऑपरेशन को निष्पादित किया जाएगा।

सीमा खंड

बल्क कलेक्ट कांसेप्ट संपूर्ण डेटा को लक्ष्य संग्रह चर में एक बल्क के रूप में लोड करता है अर्थात संपूर्ण डेटा को एकल-गो में संग्रह चर में आबाद किया जाएगा। लेकिन यह उचित नहीं है जब कुल रिकॉर्ड जिसे लोड करने की आवश्यकता है, बहुत बड़ी है, क्योंकि जब पीएल / एसक्यूएल पूरे डेटा को लोड करने की कोशिश करता है तो यह अधिक सत्र मेमोरी की खपत करता है। इसलिए, इस बल्क कलेक्ट ऑपरेशन के आकार को सीमित करना हमेशा अच्छा होता है।

हालाँकि, इस आकार की सीमा को 'सेलेक्ट' स्टेटमेंट में ROWNUM कंडीशन के द्वारा आसानी से प्राप्त किया जा सकता है, जबकि कर्सर के मामले में यह संभव नहीं है।

इस पर काबू पाने के लिए ओरेकल ने IT लिमिट ’क्लॉज प्रदान किया है जो उन अभिलेखों की संख्या को परिभाषित करता है जिन्हें थोक में शामिल करने की आवश्यकता है।

वाक्य - विन्यास:

FETCH  BULK COLLECT INTO  LIMIT ;

उपरोक्त सिंटेक्स में, कर्सर लाने वाला स्टेटमेंट लिमिट क्लॉज के साथ BULK COLLECT स्टेटमेंट का उपयोग करता है।

बल्क संकलन विशेषताएँ

कर्सर विशेषताओं के समान BULK COLLECT में% BULK_ROWCOUNT (n) है जो FORALL स्टेटमेंट के n वें DML स्टेटमेंट में प्रभावित पंक्तियों की संख्या लौटाता है , अर्थात यह संग्रह से हर एक मूल्य में FORALL स्टेटमेंट में प्रभावित रिकॉर्ड की गिनती देगा। परिवर्तनशील। शब्द 'एन' संग्रह में मूल्य के अनुक्रम को इंगित करता है, जिसके लिए पंक्ति गणना की आवश्यकता होती है।

उदाहरण 1 : इस उदाहरण में, हम BULK COLLECT का उपयोग करते हुए एम्प्लॉई टेबल से सभी कर्मचारी का नाम प्रोजेक्ट करेंगे और हम FORALL का उपयोग करके सभी कर्मचारियों के वेतन में 5000 की वृद्धि करने जा रहे हैं।

DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;TYPE lv_emp_name_tbl IS TABLE OF VARCHAR2(50);lv_emp_name lv_emp_name_tbl;BEGINOPEN guru99_det;FETCH guru99_det BULK COLLECT INTO lv_emp_name LIMIT 5000;FOR c_emp_name IN lv_emp_name.FIRST… lv_emp_name.LASTLOOPDbms_output.put_line(‘Employee Fetched:‘||c_emp_name);END LOOP:FORALL i IN lv_emp_name.FIRST… lv emp_name.LASTUPDATE emp SET salaiy=salary+5000 WHERE emp_name=lv_emp_name(i);COMMIT; Dbms_output.put_line(‘Salary Updated‘);CLOSE guru99_det;END;/

उत्पादन

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYYSalary Updated

कोड स्पष्टीकरण:

  • कोड लाइन 2 : कथन के लिए कर्सर गुरु 99_det की घोषणा करते हुए 'एम्पायर से चयन करें'।
  • कोड पंक्ति 3 : lv_emp_name_tbl को VARCHAR2 की तालिका प्रकार के रूप में घोषित करना (50)
  • कोड पंक्ति 4 : lv_emp_name को lv_emp_name_tbl प्रकार के रूप में घोषित करना।
  • कोड लाइन 6: कर्सर को खोलना।
  • कोड लाइन 7: लिमिट आकार के साथ 5000 COLL lv_emp_name वैरिएबल के साथ BULK COLLECT का उपयोग करके कर्सर लाना।
  • कोड लाइन 8-11: संग्रह में सभी रिकॉर्ड को प्रिंट करने के लिए लूप की स्थापना lv_emp_name।
  • कोड लाइन 12: सभी कर्मचारी के वेतन को 5000 तक अपडेट करने के लिए FORALL का उपयोग करना।
  • कोड लाइन 14: लेनदेन करना।