2009-12-18 8 views
7

कई गूगल और एसओ खोज के बाद, मैं इस सरल प्रश्न के एक निश्चित जवाब नहीं मिल सकता है?एक अन्य संग्रहीत प्रक्रिया के भीतर ओरेकल प्रक्रिया को परिभाषित करने के लिए वाक्यविन्यास क्या है?</p> <p>मैं कैसे उपयोग करने के लिए एक और प्रक्रिया के अंदर एक प्रक्रिया को परिभाषित कर सकते हैं:

मुझे पता है कि नेस्टेड ब्लॉक और नेस्टेड प्रक्रियाएं हैं, लेकिन मैंने जो भी चाहता हूं उसके लिए सटीक वाक्यविन्यास नहीं देखा है। अर्थात

create or replace 
PROCEDURE TOP_PROCEDURE 
(...) 
IS 
-- nested procedure here? 
BEGIN 
    NULL; 
END; 
+1

टोनी का जवाब स्पॉट पर है, लेकिन मुझे पूछना है कि आप ऐसा क्यों करना चाहते हैं। मैंने घोंसला वाली प्रक्रियाओं को देखा है, लेकिन मैंने उन्हें कभी भी अच्छी तरह से उपयोग नहीं किया है। यही है, आप लगभग हमेशा पैकेज में प्रक्रिया को बंद करने से बेहतर होते हैं (यदि यह पहले से ही पैकेज में नहीं है) और नेस्टेड प्रक्रियाओं के लिए पैकेज में निजी तरीके बनाना। अन्यथा, यह कोड का पालन करने के लिए भ्रमित हो जाता है और अनिवार्य रूप से सभी TOP_PROCEDURE के स्थानीय चर के रूप में घोंसले प्रक्रियाओं के संदर्भ में वैश्विक चर होने के खराब अभ्यास की ओर जाता है। –

+1

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

+0

आप बिंदु निश्चित रूप से वैध जस्टिन हैं, लेकिन सच में मैं जेफरी द्वारा निर्दिष्ट तरीके से इसका उपयोग कर रहा हूं। यह वास्तव में जिज्ञासा से भी एक प्रश्न था। यह मेरे कोड को दोबारा करने का एक त्वरित तरीका है। – daveslab

उत्तर

15
create or replace 
PROCEDURE TOP_PROCEDURE 
(...) 
IS 
    variable NUMBER; 
    PROCEDURE nested_procedure (...) 
    IS 
    BEGIN 
    NULL; 
    END; 
    PROCEDURE another_nested_procedure (...) 
    IS 
    BEGIN 
    NULL; 
    END; 
BEGIN 
    NULL; 
END; 

स्थानीय प्रक्रियाओं के बाद कुछ और (जैसे चर) घोषित किया जाना चाहिए।

+0

सरल और तेज़ उत्तर। बहुत बढ़िया। – daveslab

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