हम पिछले ट्यूटोरियल में देख चुके हैं कि सिंपल कर्सर पर आधारित कर्सर आधारित रिकॉर्ड टाइप वेरिएबल कैसे बनाया जाता है जो डेटा की एक पंक्ति लौटाता है। अब यहां सवाल यह उठता है कि क्या हम कर्सर के साथ एक ही रिकॉर्ड डेटाटाइप वेरिएबल का उपयोग कर सकते हैं जो डेटा की कई पंक्तियों को लौटाता है? उत्तर जानने के लिए, साथ पढ़ें और सीखें कि एकल कर्सर आधारित रिकॉर्ड डेटाटाइप चर का उपयोग करके एक कर्सर द्वारा लौटाए गए एकाधिक मानों को कैसे संभालना है।
चूंकि हम कर्सर-आधारित रिकॉर्ड के साथ काम कर रहे हैं, इसलिए कर्सर का थोड़ा सा ज्ञान आवश्यक है। सादगी के लिए और इस अवधारणा को समझने में आसान बनाने के लिए मैं प्रदर्शन के लिए एक सरल स्पष्ट-कर्सर का उपयोग करूंगा।
चरण 1:एक साधारण स्पष्ट कर्सर घोषित करें
एक कर्सर-आधारित रिकॉर्ड डेटाटाइप के लिए पहले से बनाए गए कर्सर की आवश्यकता होती है। यह कर्सर हमारे रिकॉर्ड प्रकार चर के लिए एक अंतर्निहित आधार बन जाएगा। रिकॉर्ड प्रकार चर के सभी फ़ील्ड जो इस कर्सर का उपयोग करके बनाए गए हैं, उनका नाम और डेटाटाइप वही होगा जो कर्सर की सेलेक्ट-लिस्ट में उपयोग किए गए कॉलम का है।
SET SERVEROUTPUT ON; DECLARE CURSOR cur_RebellionRider IS SELECT first_name, salary FROM employees WHERE employee_id > 200;
पिछले ट्यूटोरियल के कर्सर के विपरीत, जो डेटा की एक पंक्ति लौटा रहा है, यह कर्सर कई पंक्तियों को लौटाएगा। इन सभी पंक्तियों में 200 से अधिक कर्मचारी आईडी वाले सभी कर्मचारियों का पहला नाम और वेतन शामिल होगा।
चरण2:कर्सर आधारित रिकॉर्ड डेटाटाइप वैरिएबल घोषित करें
जैसा कि हमने कर्सर बनाया है, अब हम इस कर्सर का उपयोग करके अपना रिकॉर्ड वैरिएबल घोषित करने के लिए पूरी तरह तैयार हैं।
var_emp cur_RebellionRider%ROWTYPE;
Var_emp रिकॉर्ड प्रकार चर है और चूंकि यह कर्सर cur_RebellionRider पर आधारित है, इसलिए हम गर्व से इसे कर्सर-आधारित रिकॉर्ड प्रकार चर कह सकते हैं। अब हमें यह देखना होगा कि क्या यह एकल रिकॉर्ड चर अंतर्निहित कर्सर cur_RebellionRider द्वारा लौटाए गए सभी डेटा को धारण करने में सक्षम है।
चरण 3:कर्सर-रिकॉर्ड वैरिएबल को इनिशियलाइज़ करें
जैसा कि हमने पीएल/एसक्यूएल ट्यूटोरियल 34 में चर्चा की थी कि एक रिकॉर्ड वेरिएबल का इनिशियलाइज़ेशन इसे कुछ मान निर्दिष्ट करने की प्रक्रिया है। कर्सर के मामले में, FETCH-INTO स्टेटमेंट यह काम करता है। लेकिन हमें यह सुनिश्चित करना होगा कि हमने कर्सर जीवन चक्र का ठीक से पालन किया है।
यदि आप नहीं जानते कि यह कर्सर जीवन चक्र क्या है और कर्सर बनाने में शामिल कदम क्या हैं तो "डेटाबेस कर्सर का परिचय" पर इस ब्लॉग को देखें।
BEGIN OPEN cur_RebellionRider; LOOP FETCH cur_RebellionRider INTO var_emp; EXIT WHEN cur_RebellionRider%NOTFOUND; DBMS_OUTPUT.PUT_LINE (var_emp.first_name||' '||var_emp.salary ); END LOOP;--Simple Loop End CLOSE cur_RebellionRider; END;
पीएल/एसक्यूएल ब्लॉक के उपरोक्त निष्पादन खंड जो हम यहां बना रहे हैं, को मेरे यूट्यूब चैनल पर वीडियो ट्यूटोरियल में लाइन-बाय-लाइन समझाया गया है। इसे जरूर देखें।
तो यही है। हमें बस इतना ही करना है। अब कोड के इन सभी हिस्सों को मिलाते हैं, जिन्हें हमने ऊपर अलग-अलग चरणों में एक गुमनाम PL/SQL ब्लॉक में देखा था।
Oracle डेटाबेस में कर्सर-आधारित रिकॉर्ड डेटाटाइप वैरिएबल
SET SERVEROUTPUT ON; DECLARE CURSOR cur_RebellionRider IS SELECT first_name, salary FROM employees WHERE employee_id > 200; var_emp cur_RebellionRider%ROWTYPE; BEGIN OPEN cur_RebellionRider; LOOP FETCH cur_RebellionRider INTO var_emp; EXIT WHEN cur_RebellionRider%NOTFOUND; DBMS_OUTPUT.PUT_LINE (var_emp.first_name||' '||var_emp.salary); END LOOP; CLOSE cur_RebellionRider; END;
जब आप उपरोक्त कोड को संकलित और चलाते हैं तो आपको वह सभी डेटा मिल जाएगा जो FETCH-INTO कथन कर्सर cur_RebellionRider से प्राप्त होता है और कर्सर-आधारित रिकॉर्ड चर var_emp में संग्रहीत होता है। इसका तात्पर्य है कि हम वास्तव में एक कर्सर आधारित रिकॉर्ड का उपयोग करके डेटा की कई पंक्तियों को संभाल सकते हैं।
मेरे पीएल/एसक्यूएल वीडियो ट्यूटोरियल में मैंने पूछा कि क्या हम इस कोड को सरल बना सकते हैं या क्या वही कार्य करने का कोई अन्य तरीका है। इसका उत्तर है हां, एक ही परिणाम प्राप्त करने के कई तरीके हैं और उनमें से एक "कर्सर फॉर-लूप" का उपयोग करना है। यह एक विशेष प्रकार का लूप है जो आपके लिए पृष्ठभूमि में अंतर्निहित कर्सर को खोलने, प्राप्त करने और बंद करने के साथ-साथ रिकॉर्ड चर घोषित करता है। आप यहां अधिक कर्सर फॉर-लूप पढ़ सकते हैं।
SQL विशेषज्ञ के लिए संदर्भ पुस्तक 1z0-047 संबद्ध लिंक
OCA Oracle डेटाबेस SQL प्रमाणित विशेषज्ञ परीक्षा गाइड (परीक्षा 1Z0-047)
यहां कर्सर फॉर-लूप का उपयोग करके किया गया कोड है जो उपरोक्त कोड के बराबर है। जैसा कि आप देख सकते हैं कि यह कुछ लाइन-ऑफ-कोड्स (LOCs) के साथ बहुत कम जटिल है।
SET SERVEROUTPUT ON; BEGIN FOR var_emp IN (SELECT first_name, salary FROM employees WHERE employee_id >200) LOOP DBMS_OUTPUT.PUT_LINE(var_emp.first_name||' '||var_emp.salary); END LOOP; END;
दोनों कोड एक ही परिणाम देंगे क्योंकि दोनों एक ही कार्य कर रहे हैं।
आशा है कि आपको यह विस्तृत PL/SQL ट्यूटोरियल पसंद आया होगा। कृपया इसे अपने सोशल मीडिया पर साझा करना सुनिश्चित करें और मुझे टैग करें क्योंकि मैं हर महीने रेबेलियनराइडर का माल बेतरतीब ढंग से चुने गए उपयोगकर्ता को दे रहा हूं। नियमित अपडेट के लिए मेरे सोशल मीडिया [ट्विटर/फेसबुक/इंस्टाग्राम] पर भी मुझे फॉलो करें।
धन्यवाद और आपका दिन शुभ हो!