ऐसा लगता है कि आपने स्पष्ट कर्सर को भ्रमित किया है, उदा.:
declare
cursor cur is
select dummy from dual;
begin
for rec in cur
loop
dbms_output.put_line(rec.dummy);
end loop;
end;
/
रेफ कर्सर के साथ - जो एक खुले कर्सर का सूचक है।
आप आमतौर पर डीबी में एक कर्सर खोलने के लिए एक रेफरी कर्सर का उपयोग करेंगे और इसे लूप के लिए कॉलिंग ऐप पर वापस भेज देंगे।
जिस तरह से आपने रेफरी कर्सर को आउट पैरामीटर के रूप में घोषित किया है और फिर उसी प्रक्रिया में उनके माध्यम से लूप करने का प्रयास किया है, इसका कोई मतलब नहीं है - एक बार जब आप एक कर्सर से रिकॉर्ड प्राप्त कर लेते हैं, तो आप इसे फिर से प्राप्त नहीं कर सकते।
यदि आपको एक रेफरी कर्सर के माध्यम से पूरी तरह से लूप करना होगा, तो आप इस प्रकार के सिंटैक्स का उपयोग करेंगे:
declare
cur sys_refcursor;
rec dual%rowtype;
begin
open cur for select dummy from dual;
loop
fetch cur into rec;
exit when cur%notfound;
dbms_output.put_line(rec.dummy);
end loop;
end;
/
लेकिन जैसा कि मैंने कहा, सामान्य तौर पर, आप डीबी में रेफ कर्सर के माध्यम से लूपिंग नहीं करेंगे, आप इसे कॉलिंग कोड में कर रहे होंगे।
शायद अगर आपने अपने प्रश्न को उन आवश्यकताओं के साथ अपडेट किया है जिन्हें आप पूरा करने का प्रयास कर रहे हैं, तो हम इसे करने का एक बेहतर तरीका सुझा सकते हैं।