Oracle ऐसा इसलिए करता है क्योंकि PL/SQL पैकेज को पुन:संकलित करने से उपयोग में आने वाले किसी भी सत्र चर को अमान्य कर दिया जाता है।
इससे बचने के लिए हम बहुत कुछ नहीं कर सकते, सिवाय अच्छे परिनियोजन प्रथाओं के उपयोग के। डेटाबेस के उपयोग में होने पर परिवर्तनों को लागू न करें, सुनिश्चित करें कि सभी कनेक्शन ठीक से डिस्कनेक्ट हो गए हैं, आदि। सीआई/सीडी के इस युग में शून्य डाउनटाइम और अन्य रोमांचक नवाचारों की तुलना में आसान कहा जाता है।
तो लॉकर के पीछे एक चीज़ है:pragma serially_reusable;
. इस निर्देश का अर्थ है कि पैकेज की स्थिति एक सर्वर कॉल . की अवधि के लिए बनी हुई है . उदाहरण के लिए यदि हमारे पास एक पीएल/एसक्यूएल ब्लॉक है जो एसआर प्रक्रिया को तीन बार कॉल करता है तो उस प्रक्रिया द्वारा बदले गए किसी भी चर को तीन कॉलों में मूल्य मुख्य होगा। लेकिन अगली बार जब हम ब्लॉक चलाते हैं - उसी सत्र में - वेरिएबल को उनके शुरुआती मानों पर रीसेट कर दिया जाएगा।
क्रमिक रूप से पुन:प्रयोज्य PL/SQL की कई सीमाएँ हैं - उदाहरण के लिए, इसका उपयोग SQL प्रश्नों में नहीं किया जा सकता है। लेकिन आपके दृष्टिकोण से बड़ा आकर्षण ORA-04068 या ORA-04061 त्रुटियां नहीं हैं। कोई सत्र स्थिति नहीं, अमान्य करने के लिए कुछ भी नहीं।
pragma serially_reusable
पैकेज स्तर पर घोषित किया जाना चाहिए, और शरीर के साथ-साथ कल्पना में भी। इसलिए आपको सुनिश्चित होना चाहिए कि किसी भी पैकेज्ड प्रक्रिया को सर्वर कॉल पर स्थिति बनाए रखने की आवश्यकता नहीं है।