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

Oracle डेटाबेस में एकाधिक मान लौटाने वाले कर्सर के साथ कर्सर आधारित रिकॉर्ड डेटाटाइप

हम पिछले ट्यूटोरियल में देख चुके हैं कि सिंपल कर्सर पर आधारित कर्सर आधारित रिकॉर्ड टाइप वेरिएबल कैसे बनाया जाता है जो डेटा की एक पंक्ति लौटाता है। अब यहां सवाल यह उठता है कि क्या हम कर्सर के साथ एक ही रिकॉर्ड डेटाटाइप वेरिएबल का उपयोग कर सकते हैं जो डेटा की कई पंक्तियों को लौटाता है? उत्तर जानने के लिए, साथ पढ़ें और सीखें कि एकल कर्सर आधारित रिकॉर्ड डेटाटाइप चर का उपयोग करके एक कर्सर द्वारा लौटाए गए एकाधिक मानों को कैसे संभालना है।

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

चरण 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 ट्यूटोरियल पसंद आया होगा। कृपया इसे अपने सोशल मीडिया पर साझा करना सुनिश्चित करें और मुझे टैग करें क्योंकि मैं हर महीने रेबेलियनराइडर का माल बेतरतीब ढंग से चुने गए उपयोगकर्ता को दे रहा हूं। नियमित अपडेट के लिए मेरे सोशल मीडिया [ट्विटर/फेसबुक/इंस्टाग्राम] पर भी मुझे फॉलो करें।

धन्यवाद और आपका दिन शुभ हो!


  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. अनुक्रम में मौजूद मानों के आधार पर समूहित करें

  3. Oracle ट्रिगर हटाने के बाद... म्यूटेटिंग टेबल (ORA-04091) से कैसे बचें?

  4. Oracle के लिए हल्का

  5. Oracle में इस पथ को उल्टा करें z/y/x से x/y/z . तक