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

PLS-00221:'C1'(कर्सर) एक प्रक्रिया नहीं है या अपरिभाषित है

ऐसा लगता है कि आपने स्पष्ट कर्सर को भ्रमित किया है, उदा.:

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;
/

लेकिन जैसा कि मैंने कहा, सामान्य तौर पर, आप डीबी में रेफ कर्सर के माध्यम से लूपिंग नहीं करेंगे, आप इसे कॉलिंग कोड में कर रहे होंगे।

शायद अगर आपने अपने प्रश्न को उन आवश्यकताओं के साथ अपडेट किया है जिन्हें आप पूरा करने का प्रयास कर रहे हैं, तो हम इसे करने का एक बेहतर तरीका सुझा सकते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. किसी विशिष्ट मान के लिए तालिका में केवल 3 पंक्तियों को जोड़ने की अनुमति दें

  2. Oracle एपेक्स 4.0.2 उपयोगकर्ता खाते से *.xlsx या *.xls से Oracle तालिका में डेटा लोड करें

  3. मैं Oracle SQL डेवलपर को DB कनेक्शन बंद करने से कैसे रोक सकता हूँ?

  4. ऑरैकल एसक्यूएल के खंड में एक चर को कैसे पास किया जाए?

  5. Oracle संग्रहीत कार्यविधि के एंड टू एंड प्रदर्शन को प्रोफ़ाइल कैसे करें