मुझे संदेह है कि आप इस तरह के स्टैक में केवल अंतिम त्रुटि की रिपोर्ट कर रहे हैं:
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "schema.package" has been invalidated
ORA-04065: not executed, altered or dropped package body "schema.package"
ORA-06508: PL/SQL: could not find program unit being called: "schema.package"
अगर ऐसा है, तो ऐसा इसलिए है क्योंकि आपका पैकेज स्टेटफुल है:
<ब्लॉककोट>वेरिएबल्स, स्थिरांक और कर्सर के मान जो एक पैकेज घोषित करता है (या तो इसके विनिर्देश या बॉडी में) इसके पैकेजस्टेट शामिल होते हैं . यदि कोई PL/SQL पैकेज कम से कम एक चर, स्थिरांक, या कर्सर घोषित करता है, तो पैकेज स्टेटफुल है; अन्यथा, यह स्टेटलेस है ।
जब आप पुन:संकलित करते हैं तो राज्य खो जाता है:
<ब्लॉककोट>यदि तत्काल, स्टेटफुल पैकेज का मुख्य भाग पुन:संकलित किया जाता है (या तो स्पष्ट रूप से, "ALTER PACKAGE Statement" के साथ, या परोक्ष रूप से), तो पैकेज में एक उपप्रोग्राम का अगला आह्वान Oracle डेटाबेस को मौजूदा पैकेज स्थिति को त्यागने और अपवाद को बढ़ाने का कारण बनता हैORA-04068।पी>
PL/SQL द्वारा अपवाद उठाए जाने के बाद, पैकेज का संदर्भ Oracle डेटाबेस को पैकेज को पुन:प्रारंभ करने का कारण बनता है, जो पुन:प्रारंभ होता है...
यदि आपके पैकेज में राज्य है तो आप इससे नहीं बच सकते। मुझे लगता है कि वास्तव में स्टेटफुल होने के लिए पैकेज की आवश्यकता होना काफी दुर्लभ है, इसलिए आपको पैकेज में घोषित की गई किसी भी चीज़ पर फिर से जाना चाहिए, लेकिन किसी फ़ंक्शन या प्रक्रिया के बाहर, यह देखने के लिए कि क्या उस स्तर पर वास्तव में इसकी आवश्यकता है। हालांकि आप 10g पर हैं, इसमें स्थिरांक शामिल हैं, न कि केवल चर और कर्सर।
लेकिन उद्धृत दस्तावेज़ीकरण के अंतिम पैराग्राफ का अर्थ है कि अगली बार जब आप उसी सत्र में पैकेज का संदर्भ देंगे, तो आपको त्रुटि नहीं मिलेगी और यह सामान्य रूप से काम करेगा (जब तक आप फिर से संकलित नहीं करते)।