आगे की घोषणा से कोई लेना-देना नहीं है।
यह इस तथ्य से संबंधित है कि आप फ़ंक्शन को कॉल करने के लिए SQL क्वेरी का उपयोग कर रहे हैं . ऐसा लगता है कि किसी फ़ंक्शन को लागू करने के लिए कथन का उपयोग करते समय, आप अब PL/SQL पैकेज के दायरे में नहीं हैं, इस प्रकार आप केवल सार्वजनिक रूप से उपलब्ध फ़ंक्शंस को कॉल कर सकते हैं।
क्यों , मैं केवल अनुमान लगा सकता हूं, इसलिए इसे अनुमति के रूप में न लें, लेकिन PL/SQL और SQL के अलग-अलग इंजन हैं . इसलिए, अपने pl/sql पैकेज के अंदर भी एक sql क्वेरी करते समय, आप SQL के स्तर पर जाते हैं जहाँ यह SQL इंजन के अनुसार अनुमतियों की फिर से जाँच करेगा। इसलिए यह नहीं पता कि इसे पीएल/एसक्यूएल पैकेज के भीतर से निष्पादित किया गया है और आपको निजी फ़ंक्शन को कॉल करने की अनुमति दी जानी चाहिए।
मुझे लगता है कि इंजन के अंतर को आसानी से जांचा जा सकता है, 32000 के वर्चर 2 का उपयोग करने का प्रयास करें, यह आपके पीएल/एसक्यूएल फ़ंक्शन के भीतर काम करेगा। अब, यदि आप अपने pl/sql फ़ंक्शन को varchar2(32000)
returning लौटाते हुए कॉल करते हैं , यह विफल हो जाएगा। यह एक ऐसी समस्या है जिसका मैं सामना कर चुका हूं, लेकिन आपके पास स्निपेट देने के लिए मेरे पास कोई डेटाबेस नहीं है।