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

पैकेज बॉडी के भीतर निजी फ़ंक्शन को कॉल करना

आपके पास जो समस्या है (यह मानते हुए कि आप सही तरीके से नामित प्रक्रिया/फ़ंक्शन को सही तरीके से कॉल कर रहे हैं) यह है कि आप किसी ऐसे फ़ंक्शन पर कॉल करने का प्रयास कर रहे हैं जिसे अभी तक घोषित नहीं किया गया है। इसके दो तरीके हैं, यह मानते हुए कि आप फ़ंक्शन को निजी रखना चाहते हैं:

  1. किसी भी प्रक्रिया/कार्य से पहले ADD_STUDENT फ़ंक्शन को घोषित करें जो इसे लागू करता है।
  2. आगे की घोषणा का इस्तेमाल करें फ़ंक्शन को लागू करने से पहले घोषित करने के लिए।

तो, विकल्प 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 आवश्यक हो सकता है यदि आपके पास दो मॉड्यूल हैं जो एक दूसरे को संदर्भित करते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle jdbc ड्राइवर नहीं ढूँढ सकता

  2. Oracle D2k, Oracle प्रपत्र 10g, Oracle प्रपत्र 6i . में अनुलग्नकों के साथ ईमेल भेजें

  3. तालिका बनाने के 2 तरीके यदि यह Oracle में पहले से मौजूद नहीं है

  4. DBMS_SCHEDULER.CREATE_JOB प्रक्रिया के साथ एक प्रक्रिया कैसे निष्पादित करें

  5. एएसपी से एक्सेल फॉर्म में दिनांक प्रारूप