Oracle PL/SQL कर्सर: उदाहरण के साथ इंप्लिसिट, एक्सप्लिसिट, फॉर लूप
⚡ स्मार्ट सारांश
कर्सर में Oracle PL/SQL कर्सर, SQL स्टेटमेंट द्वारा लौटाई गई पंक्तियों को धारण करने वाले संदर्भ क्षेत्र के पॉइंटर होते हैं। ये दो प्रकार के होते हैं: इम्प्लिसिट कर्सर, जो DML के लिए स्वचालित रूप से बनाए जाते हैं, और एक्सप्लिसिट कर्सर, जिन्हें प्रोग्रामर द्वारा घोषित और नियंत्रित किया जाता है।
PL/SQL में कर्सर क्या है?
कर्सर, संदर्भ क्षेत्र का एक सूचक होता है। Oracle यह किसी प्रक्रिया के लिए एक संदर्भ क्षेत्र बनाता है एसक्यूएल यह कथन है, और इस क्षेत्र में कथन से संबंधित सभी जानकारी शामिल है।
PL / SQL यह प्रोग्रामर को कर्सर के माध्यम से कॉन्टेक्स्ट एरिया को नियंत्रित करने की अनुमति देता है। कर्सर SQL स्टेटमेंट द्वारा लौटाई गई पंक्तियों को रखता है, और कर्सर द्वारा रखी गई पंक्तियों के समूह को सक्रिय समूह कहा जाता है। इन कर्सरों को नाम भी दिया जा सकता है ताकि कोड में किसी अन्य स्थान से उन्हें संदर्भित किया जा सके।
कर्सर दो प्रकार के होते हैं:
- अंतर्निहित कर्सर
- स्पष्ट कर्सर
अंतर्निहित कर्सर
जब भी कोई डीएमएल ऑपरेशन जब डेटाबेस में कोई ऑपरेशन होता है, तो एक इम्प्लिसिट कर्सर बनता है जिसमें उस विशेष ऑपरेशन से प्रभावित पंक्तियाँ होती हैं। इन कर्सरों को नाम नहीं दिया जा सकता है, इसलिए इन्हें कोड में किसी अन्य स्थान से नियंत्रित या संदर्भित नहीं किया जा सकता है। हम केवल कर्सर एट्रिब्यूट्स के माध्यम से सबसे हाल के कर्सर को ही संदर्भित कर सकते हैं।
स्पष्ट कर्सर
प्रोग्रामर को अपने डीएमएल ऑपरेशन्स को निष्पादित करने और उस पर अधिक नियंत्रण प्राप्त करने के लिए एक नामित संदर्भ क्षेत्र बनाने की अनुमति है। स्पष्ट कर्सर को डिक्लेरेशन सेक्शन में परिभाषित किया जाना चाहिए। PL/SQL ब्लॉकऔर इसे उस SELECT स्टेटमेंट के लिए बनाया गया है जिसका उपयोग कोड में किया जाना है।
एक्सप्लिसिट कर्सर के साथ काम करने में शामिल चरण नीचे दिए गए हैं:
- कर्सर की घोषणा: कर्सर घोषित करने का सीधा सा मतलब है कि घोषणा भाग में परिभाषित SELECT स्टेटमेंट के लिए एक नाम वाला कॉन्टेक्स्ट एरिया बनाना। इस कॉन्टेक्स्ट एरिया का नाम कर्सर के नाम के समान ही होता है।
- कर्सर खोलना: कर्सर खोलने से PL/SQL को इस कर्सर के लिए मेमोरी आवंटित करने का निर्देश मिलता है। इससे कर्सर रिकॉर्ड लाने के लिए तैयार हो जाता है।
- कर्सर से डेटा प्राप्त करना: इस प्रक्रिया में, SELECT स्टेटमेंट निष्पादित होता है और प्राप्त पंक्तियाँ आवंटित मेमोरी में संग्रहीत हो जाती हैं। इन्हें अब सक्रिय सेट कहा जाता है। कर्सर से डेटा प्राप्त करना एक रिकॉर्ड-स्तरीय गतिविधि है, जिसका अर्थ है कि हम डेटा को रिकॉर्ड-दर-रिकॉर्ड तरीके से एक्सेस कर सकते हैं। प्रत्येक फ़ेच स्टेटमेंट एक सक्रिय सेट प्राप्त करता है और उस विशेष रिकॉर्ड की जानकारी रखता है। यह स्टेटमेंट SELECT स्टेटमेंट के समान है जो रिकॉर्ड प्राप्त करता है और उसे INTO क्लॉज़ में वेरिएबल को असाइन करता है, लेकिन यह कोई त्रुटि नहीं उत्पन्न करेगा। अपवाद.
- कर्सर बंद करना: सभी रिकॉर्ड प्राप्त हो जाने के बाद, हमें कर्सर को बंद करने की आवश्यकता होती है ताकि इस संदर्भ क्षेत्र को आवंटित मेमोरी मुक्त हो जाए।
वाक्य - विन्यास
DECLARE CURSOR <cursor_name> IS <SELECT statement>; <cursor_variable declaration>; BEGIN OPEN <cursor_name>; FETCH <cursor_name> INTO <cursor_variable>; . . CLOSE <cursor_name>; END;
उपरोक्त वाक्य संरचना में, घोषणा भाग में कर्सर और उस कर्सर चर की घोषणा शामिल है जिसमें प्राप्त डेटा असाइन किया जाएगा। कर्सर घोषणा में दिए गए SELECT कथन के लिए कर्सर बनाया जाता है। निष्पादन भाग में, घोषित कर्सर को खोला जाता है, डेटा प्राप्त किया जाता है और बंद किया जाता है।
कर्सर विशेषताएँ
इम्प्लिसिट कर्सर और एक्सप्लिसिट कर्सर दोनों में कुछ ऐसे एट्रिब्यूट होते हैं जिन्हें एक्सेस किया जा सकता है। ये एट्रिब्यूट कर्सर की कार्यप्रणाली के बारे में अधिक जानकारी देते हैं। नीचे विभिन्न कर्सर एट्रिब्यूट और उनके उपयोग दिए गए हैं।
| कर्सर विशेषता | विवरण |
|---|---|
| %मिल गया | यदि हाल ही में किए गए फ़ेच ऑपरेशन में कोई रिकॉर्ड सफलतापूर्वक प्राप्त हुआ है, तो यह बूलियन परिणाम TRUE लौटाता है; अन्यथा यह FALSE लौटाता है। |
| %नहीं मिला | यह %FOUND के विपरीत काम करता है। यदि हाल ही में किए गए फ़ेच ऑपरेशन में कोई रिकॉर्ड नहीं मिला, तो यह TRUE लौटाता है। |
| %खुला हैं | यदि दिया गया कर्सर पहले से खुला है तो यह बूलियन परिणाम TRUE लौटाता है; अन्यथा यह FALSE लौटाता है। |
| %पंक्ति गिनती | यह ऑपरेशन द्वारा प्रभावित या प्राप्त किए गए रिकॉर्ड की वास्तविक संख्या बताने वाला एक संख्यात्मक मान लौटाता है। |
स्पष्ट कर्सर का उदाहरण: इस उदाहरण में, हम देखेंगे कि एक स्पष्ट कर्सर को कैसे घोषित, खोला, प्राप्त किया और बंद किया जाता है। हम कर्सर का उपयोग करके emp टेबल से सभी कर्मचारियों के नाम प्रोजेक्ट करेंगे। हम कर्सर एट्रिब्यूट का उपयोग करके लूप को कर्सर से सभी रिकॉर्ड प्राप्त करने के लिए भी सेट करेंगे।
नीचे दिए गए स्क्रीनशॉट में इस स्पष्ट कर्सर का उदाहरण और इसका आउटपुट दिखाया गया है। Oracle.
DECLARE CURSOR guru99_det IS SELECT emp_name FROM emp; lv_emp_name emp.emp_name%type; BEGIN OPEN guru99_det; LOOP FETCH guru99_det INTO lv_emp_name; IF guru99_det%NOTFOUND THEN EXIT; END IF; Dbms_output.put_line('Employee Fetched:'||lv_emp_name); END LOOP; Dbms_output.put_line('Total rows fetched is'||guru99_det%ROWCOUNT); CLOSE guru99_det; END; /
उत्पादन
Employee Fetched:BBB Employee Fetched:XXX Employee Fetched:YYY Total rows fetched is 3
Code व्याख्या
- Code पंक्ति 2: 'SELECT emp_name FROM emp' कथन के लिए कर्सर guru99_det घोषित करना।
- Code पंक्ति 3: lv_emp_name नामक वेरिएबल को घोषित करना %प्रकार emp.emp_name से जुड़ा हुआ।
- Code पंक्ति 5: कर्सर guru99_det खोलना।
- Code पंक्ति 6: खाली टेबल में मौजूद सभी रिकॉर्ड को लाने के लिए बेसिक लूप स्टेटमेंट सेट करना।
- Code पंक्ति 7: guru99_det डेटा प्राप्त करता है और उस मान को lv_emp_name को असाइन करता है।
- Code पंक्ति 8: कर्सर एट्रिब्यूट %NOTFOUND का उपयोग करके यह जांचा जाता है कि कर्सर में मौजूद सभी रिकॉर्ड प्राप्त हो गए हैं या नहीं। यदि सभी रिकॉर्ड प्राप्त हो गए हैं, तो TRUE रिटर्न होता है और कंट्रोल लूप से बाहर निकल जाता है; अन्यथा कंट्रोल कर्सर से डेटा प्राप्त करना जारी रखता है और उसे प्रिंट करता है।
- Code पंक्ति 10: लूप कथन के लिए EXIT शर्त.
- Code पंक्ति 12: प्राप्त कर्मचारी का नाम प्रिंट करें.
- Code पंक्ति 14: कर्सर द्वारा प्राप्त किए गए कुल रिकॉर्डों की संख्या ज्ञात करने के लिए कर्सर विशेषता %ROWCOUNT का उपयोग करें।
- Code पंक्ति 15: लूप से बाहर निकलने के बाद, कर्सर बंद हो जाता है और आवंटित मेमोरी मुक्त हो जाती है।
FOR लूप कर्सर कथन
एक कर्सर पाश के लिए इसका उपयोग कर्सर के साथ काम करने के लिए किया जा सकता है। हम FOR लूप स्टेटमेंट में रेंज लिमिट के बजाय कर्सर का नाम दे सकते हैं, ताकि लूप कर्सर के पहले रिकॉर्ड से लेकर अंतिम रिकॉर्ड तक काम करे। कर्सर वेरिएबल, कर्सर खोलना, कर्सर से डेटा प्राप्त करना और कर्सर बंद करना, ये सभी कार्य FOR लूप द्वारा स्वतः ही किए जाते हैं।
वाक्य - विन्यास
DECLARE CURSOR <cursor_name> IS <SELECT statement>; BEGIN FOR I IN <cursor_name> LOOP . . END LOOP; END;
उपरोक्त वाक्य संरचना में, घोषणा भाग में कर्सर की घोषणा शामिल है। कर्सर घोषणा में दिए गए SELECT कथन के लिए कर्सर बनाया जाता है। निष्पादन भाग में, घोषित कर्सर को FOR लूप में स्थापित किया जाता है, और इस स्थिति में लूप चर 'I' कर्सर चर के रूप में कार्य करता है।
Oracle लूप के लिए कर्सर का उदाहरण: इस उदाहरण में, हम कर्सर-फॉर लूप का उपयोग करके एम्प्लॉई टेबल से सभी कर्मचारियों के नाम प्रोजेक्ट करेंगे।
DECLARE CURSOR guru99_det IS SELECT emp_name FROM emp; BEGIN FOR lv_emp_name IN guru99_det LOOP Dbms_output.put_line('Employee Fetched:'||lv_emp_name.emp_name); END LOOP; END; /
उत्पादन
Employee Fetched:BBB Employee Fetched:XXX Employee Fetched:YYY
Code व्याख्या
- Code पंक्ति 2: 'SELECT emp_name FROM emp' कथन के लिए कर्सर guru99_det घोषित करना।
- Code पंक्ति 4: लूप वेरिएबल lv_emp_name का उपयोग करके कर्सर के लिए FOR लूप का निर्माण करना।
- Code पंक्ति 6: लूप के प्रत्येक पुनरावृति में कर्मचारी का नाम मुद्रित करना।
- Code पंक्ति 7: लूप से बाहर निकलें (END LOOP)।
नोट: कर्सर-फॉर लूप में, कर्सर एट्रिब्यूट्स का उपयोग नहीं किया जा सकता है, क्योंकि कर्सर को खोलना, फ़ेच करना और बंद करना फॉर लूप द्वारा अप्रत्यक्ष रूप से किया जाता है।


