आपके पास जो समस्या है (यह मानते हुए कि आप सही तरीके से नामित प्रक्रिया/फ़ंक्शन को सही तरीके से कॉल कर रहे हैं) यह है कि आप किसी ऐसे फ़ंक्शन पर कॉल करने का प्रयास कर रहे हैं जिसे अभी तक घोषित नहीं किया गया है। इसके दो तरीके हैं, यह मानते हुए कि आप फ़ंक्शन को निजी रखना चाहते हैं:
- किसी भी प्रक्रिया/कार्य से पहले ADD_STUDENT फ़ंक्शन को घोषित करें जो इसे लागू करता है।
- आगे की घोषणा का इस्तेमाल करें फ़ंक्शन को लागू करने से पहले घोषित करने के लिए।
तो, विकल्प 1 के लिए, आपका उदाहरण कोड इस तरह दिखेगा:
PACKAGE BODY SCHOOL AS
FUNCTION ADD_STUDENT(...)
...
END ADD_STUDENT;
PROCEDURE ADD_PEOPLE(...)
...
some_var := ADD_STUDENT();
END ADD_PEOPLE;
END SCHOOL;
/
और विकल्प 2 के लिए आपका कोड इस तरह दिखेगा:
PACKAGE BODY SCHOOL AS
-- forward declared function
FUNCTION ADD_STUDENT(...);
PROCEDURE ADD_PEOPLE(...)
...
some_var := ADD_STUDENT();
END ADD_PEOPLE;
FUNCTION ADD_STUDENT(...)
...
END ADD_STUDENT;
END SCHOOL;
/
निजी तौर पर, मैं विकल्प 1 का पक्ष लेता हूं, क्योंकि इसका मतलब है कि पैकेज बॉडी को कम करने वाला सामान कम है, लेकिन विकल्प 2 आवश्यक हो सकता है यदि आपके पास दो मॉड्यूल हैं जो एक दूसरे को संदर्भित करते हैं।