एक कर्सर स्पष्ट या अंतर्निहित हो सकता है, और किसी भी प्रकार का उपयोग एक लूप में किया जा सकता है। आपके प्रश्न के वास्तव में दो पहलू हैं।
लूप के लिए एक अंतर्निहित कर्सर पर लूप के लिए एक स्पष्ट कर्सर का उपयोग क्यों करें?
- लूप के लिए एक स्पष्ट कर्सर का उपयोग करें जब क्वेरी का पुन: उपयोग किया जाएगा, अन्यथा एक अंतर्निहित कर्सर पसंद किया जाता है।
फ़ॉरच के बजाय लूप का उपयोग फ़ॉर लूप के बजाय एक स्पष्ट फ़ेच के साथ क्यों करें?
- जब आपको बल्क कलेक्ट करने की आवश्यकता हो या जब आपको डायनेमिक एसक्यूएल की आवश्यकता हो, तो लूप के अंदर एक फेट का उपयोग करें।
यहाँ प्रलेखन से कुछ उपयोगी जानकारी दी गई है।
लूप के लिए इंप्लिमेंटेड कॉसर का उदाहरण
BEGIN
FOR vItems IN (
SELECT last_name
FROM employees
WHERE manager_id > 120
ORDER BY last_name
)
LOOP
DBMS_OUTPUT.PUT_LINE ('Name = ' || vItems.last_name);
END LOOP;
END;
/
LOOP के लिए स्पष्ट कर्सर का उदाहरण
DECLARE
CURSOR c1 IS
SELECT last_name
FROM employees
WHERE manager_id > 120
ORDER BY last_name;
BEGIN
FOR vItems IN c1 LOOP
DBMS_OUTPUT.PUT_LINE ('Name = ' || vItems.last_name);
END LOOP;
END;
/
अव्यवस्थित कर्सर
एक अंतर्निहित कर्सर एक सत्र कर्सर है जो पीएल / एसक्यूएल द्वारा निर्मित और प्रबंधित किया जाता है। पीएल / एसक्यूएल हर बार जब आप एक सेलेक्ट या डीएमएल स्टेटमेंट चलाते हैं तो एक अंतर्निहित कर्सर खोलता है। आप एक अंतर्निहित कर्सर को नियंत्रित नहीं कर सकते, लेकिन आप इसकी विशेषताओं से जानकारी प्राप्त कर सकते हैं।
एक अंतर्निहित कर्सर अपने संबंधित बयान के चलने के बाद बंद हो जाता है; हालाँकि, इसका विशेषता मान तब तक उपलब्ध रहता है जब तक एक और SELECT या DML स्टेटमेंट नहीं चलता है।
निहित कर्सर विशेषताएँ हैं: SQL% ISOPEN, SQL% FOUND, SQL% NOTFOUND, SQL% ROWCOUNT, SQL% BULK_ROWCOUNT, SQL% BULK_EXCEPTIONS
स्पष्ट कर्सर
एक स्पष्ट कर्सर एक सत्र कर्सर है जिसे आप बनाते हैं और प्रबंधित करते हैं। आपको एक स्पष्ट कर्सर घोषित और परिभाषित करना होगा, इसे एक नाम देना और इसे एक क्वेरी के साथ जोड़ना होगा (आमतौर पर, क्वेरी कई पंक्तियों को लौटाती है)। फिर आप इनमें से किसी भी तरीके से सेट किए गए क्वेरी परिणाम को संसाधित कर सकते हैं:
स्पष्ट कर्सर खोलें (OPEN स्टेटमेंट के साथ), परिणाम सेट से पंक्तियाँ प्राप्त करें (FETCH स्टेटमेंट के साथ), और स्पष्ट कर्सर को बंद करें (CLOSE स्टेटमेंट के साथ)।
LOOP स्टेटमेंट के लिए एक कर्सर में स्पष्ट कर्सर का उपयोग करें (देखें "क्वेरी स्टेटमेंट के लिए कर्सर के साथ क्वेरी रिजल्ट सेट प्रोसेसिंग")।
आप एक स्पष्ट कर्सर के लिए एक मूल्य निर्दिष्ट नहीं कर सकते हैं, इसे एक अभिव्यक्ति में उपयोग कर सकते हैं, या इसे औपचारिक उपप्रोग्राम पैरामीटर या होस्ट चर के रूप में उपयोग कर सकते हैं। आप उन चीजों को एक कर्सर चर के साथ कर सकते हैं (देखें "कर्सर चर")।
एक अंतर्निहित कर्सर के विपरीत, आप अपने नाम से एक स्पष्ट कर्सर या कर्सर चर का संदर्भ ले सकते हैं। इसलिए, एक स्पष्ट कर्सर या कर्सर चर को नामित कर्सर कहा जाता है।
लोड स्टेटमेंट के लिए कर्सर
LOOP स्टेटमेंट के लिए कर्सर आपको सेलेक्ट स्टेटमेंट चलाने देता है और फिर परिणाम सेट की पंक्तियों के माध्यम से तुरंत लूप करता है। यह कथन एक अंतर्निहित या स्पष्ट कर्सर का उपयोग कर सकता है।
FOR
सिर्फ एक और तरीका है कि कर्सर का उपयोग करें। डॉक्स देखें: docs.oracle.com/cd/E11882_01/appdev.112/e10472/… फिर भी, क्या htp.prn () करता है?