आप इसे एक वेरिएबल के द्वारा कर सकते हैं जो केवल लूप के अंदर सेट हो जाता है। फिर आप लूप के पूरा होने के बाद उस चर की जांच कर सकते हैं कि क्या यह सेट किया गया था, और तय करें कि आपको अतिरिक्त काम करने की आवश्यकता है या नहीं।
कुछ इस तरह:
DECLARE
course_name VARCHAR2(40) := '&course_input';
v_rows_present BOOLEAN := FALSE;
BEGIN
FOR course_rec IN (SELECT a.description,
a.cost,
a.prerequisite,
b.cost AS preq_cost
FROM course a
LEFT JOIN course b
ON a.prerequisite = b.course_no
WHERE upper(a.description) LIKE '%' || course_name || '%')
LOOP
v_rows_present := TRUE;
IF course_rec.prerequisite IS NULL
THEN
dbms_output.put_line('There is NO prerequisite course for any that starts on ' || course_name || '. Try again');
ELSE
dbms_output.put_line('Course: ' || course_rec.course_description);
dbms_output.put_line('Cost: ' || course_rec.cost);
dbms_output.put_line('Prerequisite: ' || course_rec.prerequisite);
dbms_output.put_line('Prerequisite Cost: ' || course_rec.prerequisite_cost);
dbms_output.put_line('=================================================');
END IF;
END LOOP;
IF NOT v_rows_present
THEN
dbms_output.put_line('There is NO VALID course that starts on ' || course_name || '. Try again.');
END IF;
END;
/
एन.बी. मैंने आपका कोड अपडेट कर दिया है क्योंकि ऐसा प्रतीत होता है कि आपने लूप के लिए कर्सर का उपयोग करने का तरीका गलत समझा है।
- कर्सर-फॉर-लूप परोक्ष रूप से अपना स्वयं का रिकॉर्ड वैरिएबल बनाते हैं, इसलिए आपको स्वयं को घोषित करने की आवश्यकता नहीं है।
- आपको कर्सर को स्पष्ट रूप से घोषित करने की भी आवश्यकता नहीं है - यह कर्सर-फॉर-लूप स्टेटमेंट के हिस्से के रूप में किया जा सकता है।
- मानों का उपयोग करने के लिए आपको कर्सर-फॉर-लूप रिकॉर्ड से समान मानों के साथ एक नया रिकॉर्ड पॉप्युलेट करने की आवश्यकता नहीं है (जब तक आप उन्हें कर्सर-फॉर-लूप के भीतर उपयोग कर रहे हैं, निश्चित रूप से !)