PL / SQL में CURSOR क्या है?
एक कर्सर इस संदर्भ क्षेत्र का एक संकेतक है। ओरेकल SQL कथन को संसाधित करने के लिए संदर्भ क्षेत्र बनाता है जिसमें कथन के बारे में सभी जानकारी होती है।
PL / SQL प्रोग्रामर को कर्सर के माध्यम से संदर्भ क्षेत्र को नियंत्रित करने की अनुमति देता है। एक कर्सर SQL स्टेटमेंट द्वारा दी गई पंक्तियों को रखता है। कर्सर की पंक्तियों के सेट को सक्रिय सेट के रूप में जाना जाता है। इन अभिशापों को भी नाम दिया जा सकता है ताकि उन्हें कोड के किसी अन्य स्थान से संदर्भित किया जा सके।
इस ट्यूटोरियल में आप सीखेंगे-
- अव्यवस्थित कर्सर
- स्पष्ट कर्सर
- कर्सर विशेषता
- लूप कर्सर विवरण के लिए
कर्सर दो प्रकार का होता है।
- अव्यवस्थित कर्सर
- स्पष्ट कर्सर
अव्यवस्थित कर्सर
जब भी डेटाबेस में कोई DML ऑपरेशन होता है, तो एक अंतर्निहित कर्सर बनाया जाता है जो उस विशेष ऑपरेशन में प्रभावित पंक्तियों को धारण करता है। इन शापकर्ताओं का नाम नहीं लिया जा सकता है और इसलिए इन्हें कोड के किसी अन्य स्थान से नियंत्रित या संदर्भित नहीं किया जा सकता है। हम कर्सर विशेषताओं के माध्यम से केवल सबसे हाल के कर्सर का उल्लेख कर सकते हैं।
स्पष्ट कर्सर
प्रोग्रामर्स को अपने डीएमएल संचालन को निष्पादित करने के लिए नामित संदर्भ क्षेत्र बनाने की अनुमति है ताकि इस पर अधिक नियंत्रण प्राप्त कर सकें। स्पष्ट कर्सर को PL / SQL ब्लॉक के घोषणा खंड में परिभाषित किया जाना चाहिए, और यह 'SELECT' स्टेटमेंट के लिए बनाया गया है जिसे कोड में उपयोग करने की आवश्यकता है।
नीचे ऐसे चरण दिए गए हैं जो स्पष्ट अभिशापों के साथ काम करने में शामिल हैं।
- कर्सर की घोषणा
घोषणा-पत्र में परिभाषित 'कथन' कथन के लिए कर्सर को घोषित करने का अर्थ केवल एक नामांकित संदर्भ क्षेत्र बनाना है। इस संदर्भ क्षेत्र का नाम कर्सर के नाम के समान है।
- खुलने वाला कर्सर
कर्सर को खोलने से पीएल / एसक्यूएल को इस कर्सर के लिए मेमोरी आवंटित करने का निर्देश मिलेगा। यह रिकॉर्ड लाने के लिए कर्सर को तैयार करेगा।
- कर्सर से डेटा ला रहा है
इस प्रक्रिया में, 'सेलेक्ट' स्टेटमेंट निष्पादित होता है और जो पंक्तियाँ प्राप्त होती हैं, उन्हें आवंटित मेमोरी में स्टोर किया जाता है। इन्हें अब सक्रिय सेट कहा जाता है। कर्सर से डेटा प्राप्त करना एक रिकॉर्ड-स्तरीय गतिविधि है जिसका अर्थ है कि हम डेटा को रिकॉर्ड-बाय-रिकॉर्ड तरीके से एक्सेस कर सकते हैं।
प्रत्येक भ्रूण का विवरण एक सक्रिय सेट लाएगा और उस विशेष रिकॉर्ड की जानकारी रखेगा। यह कथन 'SELECT' स्टेटमेंट के समान है जो रिकॉर्ड को प्राप्त करता है और 'INTO' क्लॉज में वेरिएबल को असाइन करता है, लेकिन यह कोई अपवाद नहीं फेंकेगा।
- कर्सर को बंद करना
एक बार जब सारे रिकॉर्ड को प्राप्त कर लिया जाता है, तो हमें कर्सर को बंद करने की आवश्यकता होती है ताकि इस संदर्भ क्षेत्र को आवंटित की गई मेमोरी जारी हो सके।
वाक्य - विन्यास:
DECLARECURSORIS
- उपरोक्त सिंटैक्स में, डिक्लेरेशन भाग में कर्सर की घोषणा और कर्सर चर होता है जिसमें भ्रूण का डेटा असाइन किया जाएगा।
- कर्सर को 'SELECT' स्टेटमेंट के लिए बनाया गया है, जो कर्सर घोषणा में दिया गया है।
- निष्पादन भाग में, घोषित कर्सर खोला, लाया और बंद किया गया है।
कर्सर विशेषता
इम्प्लिक्ट कर्सर और स्पष्ट कर्सर दोनों के पास कुछ विशेषताएं हैं जिन्हें एक्सेस किया जा सकता है। ये विशेषताएँ कर्सर संचालन के बारे में अधिक जानकारी देती हैं। नीचे विभिन्न कर्सर विशेषताएँ और उनके उपयोग हैं।
कर्सर विशेषता | विवरण |
%मिल गया | यह बूलियन परिणाम 'TRUE' लौटाता है यदि सबसे हालिया भ्रूण ऑपरेशन ने रिकॉर्ड सफलतापूर्वक प्राप्त किया है, अन्यथा यह FALSE लौटाएगा। |
%पता नहीं चला | यदि यह हाल ही में लाए गए किसी भी रिकॉर्ड को लाने में सक्षम नहीं होगा, तो यह 'TRUE' लौटाएगा, इसके विपरीत% काम करता है। |
%खुला हैं | यह बूलियन परिणाम 'TRUE' देता है यदि दिए गए कर्सर को पहले ही खोल दिया गया है, अन्यथा यह 'FALSE' लौटाता है |
%पंक्ति गिनती | यह संख्यात्मक मान लौटाता है। यह अभिलेखों की वास्तविक गिनती देता है जो डीएमएल गतिविधि से प्रभावित हुईं। |
उदाहरण 1 : इस उदाहरण में, हम यह देखने जा रहे हैं कि स्पष्ट कर्सर को कैसे खोलें, खोलें और बंद करें।
हम एक कर्सर का उपयोग करते हुए एम्पायर टेबल से सभी कर्मचारी का नाम प्रोजेक्ट करेंगे हम कर्सर से सभी रिकॉर्ड लाने के लिए लूप सेट करने के लिए कर्सर विशेषता का भी उपयोग करेंगे।
DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;lv_emp_name emp.emp_name%type;BEGINOPEN guru99_det;LOOPFETCH guru99_det INTO lv_emp_name;IF guru99_det%NOTFOUNDTHENEXIT;END IF;Dbms_output.put_line(‘Employee Fetched:‘||lv_emp_name);END LOOP;Dbms_output.put_line(‘Total rows fetched is‘||guru99_det%R0WCOUNT);CLOSE guru99_det;END:/
उत्पादन
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYYTotal rows fetched is 3
कोड स्पष्टीकरण:
- कोड लाइन 2 : कथन के लिए कर्सर गुरु 99_det की घोषणा करते हुए 'एम्पायर से चयन करें'।
- कोड पंक्ति 3 : चर lv_emp_name घोषित करना।
- कोड लाइन 5 : कर्सर को खोलना गुरु99_det।
- कोड पंक्ति 6: 'रिकॉर्ड' टेबल में सभी रिकॉर्ड लाने के लिए बेसिक लूप स्टेटमेंट सेट करना।
- कोड लाइन 7: गुरु99_डेट डेटा प्राप्त करता है और मान को lv_emp_name प्रदान करता है।
- कोड लाइन 9: कर्सर में सभी रिकॉर्ड प्राप्त करने के लिए कर्सर विशेषता '% NOTFOUND' का उपयोग करना। अगर भ्रूण है तो वह 'TRUE' लौटाएगा और नियंत्रण लूप से बाहर निकल जाएगा, अन्यथा नियंत्रण कर्सर से डेटा प्राप्त करने और डेटा प्रिंट करने पर रहेगा।
- कोड लाइन 11: लूप स्टेटमेंट के लिए EXIT कंडीशन।
- कोड लाइन 12: मुद्रित कर्मचारी का नाम प्रिंट करें।
- कोड लाइन 14: कर्सर में प्रभावित / प्राप्त हुए रिकॉर्ड की कुल संख्या ज्ञात करने के लिए कर्सर विशेषता '% ROWCOUNT' का उपयोग करना।
- कोड लाइन 15: लूप से बाहर निकलने के बाद कर्सर बंद हो जाता है और आवंटित मेमोरी फ्री हो जाती है।
लूप कर्सर विवरण के लिए
"फॉर लूप" कथन का उपयोग कर्सर के साथ काम करने के लिए किया जा सकता है। हम फॉर लूप स्टेटमेंट में रेंज लिमिट के बजाय कर्सर का नाम दे सकते हैं ताकि लूप कर्सर के पहले रिकॉर्ड से लेकर कर्सर के आखिरी रिकॉर्ड तक काम करेगा। कर्सर चर, कर्सर के खुलने, लाने और कर्सर के बंद होने का अर्थ लूप फॉर फ़ॉर लूप द्वारा किया जाएगा।
वाक्य - विन्यास:
DECLARECURSORIS
- उपरोक्त सिंटैक्स में, घोषणा भाग में कर्सर की घोषणा होती है।
- कर्सर को 'SELECT' स्टेटमेंट के लिए बनाया गया है, जो कर्सर घोषणा में दिया गया है।
- निष्पादन भाग में, घोषित कर्सर फॉर लूप में सेटअप है और लूप चर 'I' इस मामले में कर्सर चर के रूप में व्यवहार करेगा।
उदाहरण 1 : इस उदाहरण में, हम कर्सर-फॉर लूप का उपयोग करके सभी कर्मचारी का नाम एम्प टेबल से प्रोजेक्ट करेंगे।
DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;BEGINFOR lv_emp_name IN guru99_detLOOPDbms_output.put_line(‘Employee Fetched:‘||lv_emp_name.emp_name);END LOOP;END;/
उत्पादन
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY
कोड स्पष्टीकरण:
- कोड लाइन 2 : कथन के लिए कर्सर गुरु 99_det की घोषणा करते हुए 'एम्पायर से चयन करें'।
- कोड पंक्ति 4 : लूप वेरिएबल lv_emp_name के साथ कर्सर के लिए 'फॉर' लूप का निर्माण।
- कोड लाइन 5: लूप के प्रत्येक पुनरावृत्ति में कर्मचारी का नाम प्रिंट करना।
- कोड लाइन 8: लूप से बाहर निकलें
नोट: कर्सर-फॉर लूप में, कर्सर की विशेषताओं को खोलने, लाने और बंद करने के बाद से उपयोग नहीं किया जा सकता है।