2013-10-15 5 views
11

नामक प्रोग्राम यूनिट नहीं मिला, मैं ऑरैकल 10 जी और टॉड 11.5 का उपयोग कर रहा हूं। मैं एक अज्ञात ब्लॉक से एपीआई कॉल करने की कोशिश कर रहा हूं।ओआरए -06508: पीएल/एसक्यूएल:

तो मैं dbms_output.put_line जोड़ने और फिर गुमनाम ब्लॉक पर अमल करने की कोशिश के बाद एपीआई पुनः संकलित करें, यह त्रुटि के रूप में

"ORA-06508: PL/SQL: could not find program unit being called". 

हालांकि अगर मैं वर्तमान सत्र समाप्त और एक नया सत्र खोलें, फिर गुमनाम ब्लॉक निष्पादित करेंगे चलता त्रुटि के साथ।

इस समस्या के कारण, जब भी मैं एपीआई में बदलाव करता हूं, सत्र को फिर से कनेक्ट करने के लिए बनाया जाता है। कोई भी मदद कर सकता है अगर इस समस्या को टोड या डेटाबेस स्तर में कोई कॉन्फ़िगरेशन करके हल किया जा सकता है।

+2

तुम भी कुछ हो रही हैं जैसे 'मौजूदा पैकेज राज्य को त्याग दिया गया था '? यदि ऐसा ही होता है तो इसे उसी सत्र में दूसरी बार चलाना चाहिए। लेकिन इससे पता चलता है कि आपके पैकेज में कुछ राज्य है, यानी एक प्रक्रिया के बजाय पैकेज में घोषित एक चर (और 'dbms_output' के साथ कुछ भी नहीं करने के लिए)। –

उत्तर

21

मुझे लगता है कि आप केवल इस तरह एक ढेर में पिछले त्रुटि की रिपोर्ट कर रहे:

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" 

यदि हां, कि है, क्योंकि your package is stateful:

चर, स्थिरांक, और कर्सर के मूल्यों कि एक पैकेज घोषित करता है (या तो इसके विनिर्देश या शरीर में) इसमें पैकेज राज्य शामिल है। यदि कोई पीएल/एसक्यूएल पैकेज कम से कम एक चर, निरंतर, या कर्सर घोषित करता है, तो पैकेज राज्य है; अन्यथा, यह स्टेटलेस है।

आप पुन: संयोजित जब राज्य खो दिया है:

एक instantiated, स्टेटफुल पैकेज के शरीर कंपाइल किया जाता है (या तो स्पष्ट रूप से, "पैकेज वक्तव्य बदल", या परोक्ष के साथ), पैकेज में एक उपप्रोग्राम का अगला आवेषण ओरेकल डेटाबेस का कारण मौजूदा पैकेज स्थिति को त्यागने और अपवाद ओआरए -04068 को बढ़ाता है।

बाद PL/SQL अपवाद को जन्म देती है, पैकेज के लिए एक संदर्भ पैकेज है, जो फिर से दृष्टांत को Oracle डाटाबेस का कारण बनता है फिर से आरंभ यह ...

आप इससे बचने नहीं कर सकते आपके पैकेज में राज्य है। मुझे लगता है कि वास्तव में राज्य के लिए एक पैकेज की जरूरत है, इसलिए आपको पैकेज में घोषित कुछ भी फिर से देखना चाहिए, लेकिन किसी कार्य या प्रक्रिया के बाहर, यह देखने के लिए कि वास्तव में उस स्तर पर इसकी आवश्यकता है या नहीं। चूंकि आप 10 जी पर हैं, इसमें स्थिरता और कर्सर न केवल स्थिरांक शामिल हैं।

लेकिन उद्धृत दस्तावेज से अंतिम पैराग्राफ का अर्थ है कि अगली बार जब आप उसी सत्र में पैकेज का संदर्भ लेंगे, तो आपको त्रुटि नहीं मिलेगी और यह सामान्य के रूप में काम करेगी (जब तक कि आप दोबारा दोबारा नहीं आते)।

+0

पूरी तरह से आपसे सहमत हैं। मैं इसके बारे में काल्पनिक संख्या में ख्याल रख सकता था। बस लानत प्रो चलाओ। मैंने इसे कॉलिंग एनन ब्लॉक से बाहर करने की कोशिश की है और यह जादू ध्वज स्पष्ट होने से पहले पूरी तरह से पूरा होने के लिए चलना चाहिए। परेशान! –

5

एक नया सत्र खोलने की तरह लगता है कुंजी है।

this उत्तर देखें।

और यहाँ पिछले जवाब के आधार पर एक awesome explanation about this error

3

है।मैंने पैकेज स्तर पर वैश्विक चर को हटाकर मेरी समस्या का समाधान किया, क्योंकि मेरे मामले में कोई प्रभाव नहीं पड़ा।

मूल स्क्रिप्ट

create or replace PACKAGE BODY APPLICATION_VALIDATION AS 

V_ERROR_NAME varchar2(200) := ''; 

PROCEDURE APP_ERROR_X47_VALIDATION ( PROCESS_ID IN VARCHAR2) AS BEGIN 
    ------ rules for validation... END APP_ERROR_X47_VALIDATION ; 

/* Some more code 
*/ 

END APPLICATION_VALIDATION;/

फिर से लिखा वैश्विक चर V_ERROR_NAME के बिना एक ही था और

संशोधित कोड के रूप में पैकेज के स्तर के नीचे प्रक्रिया में ले जाया गया

create or replace PACKAGE BODY APPLICATION_VALIDATION AS 

PROCEDURE APP_ERROR_X47_VALIDATION ( PROCESS_ID IN VARCHAR2) AS 

**V_ERROR_NAME varchar2(200) := '';** 

BEGIN 
    ------ rules for validation... END APP_ERROR_X47_VALIDATION ; 

/* Some more code 
*/ 

END APPLICATION_VALIDATION;/
संबंधित मुद्दे