मैंने पीएल / एसक्यूएल में एक साधारण संग्रहित प्रक्रिया लिखा है
मेरे कॉरर्स sys_refcursor के रूप में प्रक्रिया proc_name (outVal OUT sys_refcursor) बनाने या बदलने की प्रक्रिया है; मेरे रिकॉर्ड रिकॉर्ड% ROWTYPE; L_sql VARCHAR (2000); शुरू l_sql: = 'चयन से' चुनें '; L_sql के लिए अपना कर्सर खोलें; लूप मेरे पाठकों में मेरे कर्ते को पकड़ो; मेरे कूसर% नोटफ़ॉन्डे को निकालें; "डीबीएमएस_यूयूपीयूटी। इनपुट_लाइन ('myRecords.name ='; myRecords.name);" अंत लूप; मेरे कूजर को बंद करें; समाप्त; अब जब मैं अपने कोड में उद्धरण में पंक्ति को शामिल किए बिना SQL कमान प्रॉम्प्ट में अपनी प्रक्रिया निष्पादित करना चाहता हूं, तो मैं इसे इस तरह से करने के बारे में जाना अब जब मैं कमांड निष्पादित करने की कोशिश करता हूं
प्रिंट क्र; मुझे एक त्रुटि मिलती है
ORA-24338: स्टेटमेंट हैंडल निष्पादित नहीं कृपया मुझे इस के साथ मदद करें। मुझे यह जानना होगा कि मेरी संग्रहीत कार्यविधि से केवल इस सन्दर्भ कर्सर का उपयोग करके तालिका का प्रिंट कैसे किया जाए। मैं प्रक्रिया के भीतर कुछ भी मुद्रित नहीं करना चाहता हूं और इसलिए सभी एक साथ प्रक्रिया से पंक्ति में उद्धरण को निकालना चाहता हूं।
आपको एक त्रुटि मिलती है क्योंकि कर्सर प्रक्रिया द्वारा बंद है, इसलिए इसे" मुद्रित "नहीं किया जा सकता है। मैं निम्नलिखित सुझाव देता हूं:
-
एसक्यूएल * प्लस में अपनी प्रक्रियाओं को निष्पादित करने से पहले हमेशा SET Serveroutput चालू करें ताकि आप अपना DBMS_OUTPUT < / कोड> लॉग करें डीबगिंग / लॉगिंग के लिए इस आउटपुट का उपयोग करें। -
यदि आप एक कर्सर वापस करना चाहते हैं जो बाद में प्रदर्शित किया जाएगा, तो कर्सर को प्रक्रिया में नहीं लाएं: < pre> <कोड> एसक्यूएल & gt; बनाने या बदलने की प्रक्रिया पी (एक्स बाहर SYS_REFCURSOR) है 2 शुरू 3 चुनें एक्स के लिए * डबल से *; 4 अंत; 5 / प्रक्रिया बनाई गई एसक्यूएल & gt; चर x REFCURSOR; एसक्यूएल & gt; EXEC p (: x); पी एल / एसक्यूएल प्रक्रिया सफलतापूर्वक पूरा एसक्यूएल & gt; प्रिंट एक्स; डम --- एक्स
ध्यान दें कि कॉलिंग एप्लिकेशन (यहां एसक्यूएल * प्लस <कोड> प्रिंट ) की जिम्मेदारी है और कर्सर को ठीक से बंद करें, न कि पी एल / एसक्यूएल प्रक्रिया।
Comments
Post a Comment