2012-06-14 15 views
9

क्या ओरेकल में यह निर्धारित करने का कोई तरीका है कि पैकेज में राज्य है या स्टेटलेस है? मुझे डेटा डिक्शनरी में किसी भी दृश्य के बारे में पता नहीं है जिसमें वह जानकारी है।क्या यह निर्धारित करने का कोई तरीका है कि ओरेकल में पैकेज का राज्य है या नहीं?

"ओआरए -04068: पैकेज स्ट्रिंग की मौजूदा स्थिति को त्याग दिया गया है" त्रुटि बल्कि परेशान है। पैकेज से पैकेज चर को हटाकर इसे हटाया जा सकता है। 11 जी ने इस सुविधा को पेश किया कि सभी संकलन-समय स्थिरांक वाले वेरिएबल वाले पैकेज को स्टेटलेस माना जाएगा।

मेरे पास दो सत्र हो सकते हैं और पैकेज को संकलित कर सकते हैं और इसे दूसरे में कॉल कर सकते हैं और देख सकते हैं कि यह अपवाद फेंकता है, लेकिन उसे पैकेज में प्रक्रिया को कॉल करने की आवश्यकता है, जो वांछित नहीं हो सकता है।

+1

इससे पहले कि मैं जवाब देने के लिए, आप व्याख्या कर सकते हैं तुम क्यों जानना चाहते हैं? दर्द होने की कोशिश नहीं कर रहा है, बस यह समझने की कोशिश कर रहा है कि आप वास्तव में क्या करना चाहते हैं। आपके लिए यह जानना महत्वपूर्ण क्यों है कि पैकेज में राज्य है या नहीं? साथ ही, क्या आप यह जानने में रुचि रखते हैं कि पैकेज में राज्य है या नहीं, और इसलिए, किसी बिंदु पर ओआरए -4068 मुठभेड़ हो सकती है? या, एक राज्यव्यापी पैकेज के लिए, क्या आप यह जानने में रुचि रखते हैं कि पैकेज की वर्तमान स्थिति वैध, अमान्य, या अनियमित है या नहीं? –

+3

स्टेटफुलर पैकेज परेशान हो सकते हैं क्योंकि यदि सत्र समाप्त होने पर कोई परिवर्तन किया जाता है, तो इससे उपयोगकर्ताओं को त्रुटियां मिल सकती हैं। मुझे एक पैकेज के साथ यह समस्या है, जिसे मैं स्टेटलेस बनाने और कुछ परेशानी करने के लिए पुन: काम कर रहा था (जो भविष्य के एसओ सवाल का विषय होगा), इसलिए यह कहना आसान होगा कि पैकेज स्टेटलेस है या नहीं नहीं। साथ ही, डेटाबेस में कौन से अन्य पैकेज स्टेटफुल हैं और संभावित रूप से इस समस्या का कारण बन सकते हैं। – eaolson

उत्तर

11

ऐसा लगता है कि आप जो चाहते हैं वह सभी संकुलों को सूचीबद्ध करने में सक्षम होना है जो संभावित रूप से राज्य हो सकते हैं।

जो आप खोज रहे हैं वह केवल ऐसे पैकेज हैं जिनके पास कोई वैश्विक चर या स्थिरांक है। एक पैकेज के लिए, यह निरीक्षण द्वारा काफी सरल है। एक स्कीमा में सभी संकुल भर में देखने के लिए, हालांकि, आप पी एल/स्कोप इस्तेमाल कर सकते हैं:

पहले, स्कीमा मालिक के रूप में लॉग इन करें, अपने सत्र में पी एल/स्कोप पर बारी:

alter session set plscope_settings='IDENTIFIERS:ALL'; 

फिर, पुन: संयोजित आपके सभी पैकेज निकायों।

फिर, सभी चर और स्थिरांक पैकेज स्तर पर घोषित खोजने के लिए इस क्वेरी चलाने:

select object_name AS package, 
     type, 
     name AS variable_name 
from user_identifiers 
where object_type IN ('PACKAGE','PACKAGE BODY') 
and usage = 'DECLARATION' 
and type in ('VARIABLE','CONSTANT') 
and usage_context_id in (
    select usage_id 
    from user_identifiers 
    where type = 'PACKAGE' 
); 

मैं संकुल की जिसके परिणामस्वरूप सूची अपने लक्ष्य होगा सुझाव देना चाहेंगे।

आप 11gR2 पर हैं, तो स्थिरांक अब इस समस्या का कारण है, तो आप के बजाय इस क्वेरी का उपयोग करेंगे:

select object_name AS package, 
     type, 
     name AS variable_name 
from user_identifiers 
where object_type IN ('PACKAGE','PACKAGE BODY') 
and usage = 'DECLARATION' 
and type = 'VARIABLE' 
and usage_context_id in (
    select usage_id 
    from user_identifiers 
    where type = 'PACKAGE' 
); 
+0

यह वही नहीं है जो मैं ढूंढ रहा हूं। 11 जी में, सभी 'कॉन्स्टेंट' पैकेज चर के साथ संकुल को स्टेटलेस माना जाता है, लेकिन आपकी क्वेरी उन्हें वापस कर देगी। – eaolson

+0

ईओलसन, यह बिल्कुल सही नहीं है। 11 जीआर 1 में, स्थिरांक * करते हैं * पैकेज के पास राज्य होता है; यह 11 जीआर 2 में तय किया गया था। मैंने इस नोट को संपादित करने के लिए संपादित किया है। –

+0

हाँ, यह काम करता है! – eaolson

संबंधित मुद्दे

 संबंधित मुद्दे