2010-07-09 10 views
5

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

कुछ ऐसा:

स्वामी | पैकेज का नाम | वस्तु का नाम | अधिभार | तर्क | स्रोत

जाहिर है सबस्ट्रिंग और इंस्टिंग का उपयोग ओवरलोडेड फ़ंक्शंस के साथ समस्याएं पेश करेगा।

All_arguments में subprogram_id फ़ील्ड है जो इस पर बहुत ही कम दस्तावेज के अनुसार दिखता है कि यह विशिष्ट रूप से संदर्भित करता है कि यह पैकेज में किस प्रक्रिया से संबंधित है लेकिन ऐसा कुछ भी नहीं है जो इसका उपयोग करता है। अग्रिम

+0

फ़ंक्शन परिभाषाओं को निकालने में आपका उद्देश्य क्या है? –

+0

मेरा मतलब डीडीएल में परिभाषा जैसा था - कोशिश करने के लिए स्रोत कोड में बदल दिया गया और स्पष्ट हो कि मैं किसी विशिष्ट प्रक्रिया या फ़ंक्शन – Chris

+0

के लिए कोड सूचीबद्ध करने का प्रयास कर रहा हूं, "कोड सूचीबद्ध करें" जैसा कि फ़ंक्शन को प्रिंटर या प्रिंट में प्रिंट करता है एक फाइल में अलग है? –

उत्तर

3

IIRC में

चीयर्स, PLSQL नेस्टेड संकुल और कार्यों की अनुमति देता है। इस मामले में, आप पाएंगे कि "instring" और "substring" स्रोत कोड निकालने के लिए पर्याप्त नहीं हो सकता है, क्योंकि आप रिकर्सन का सामना कर रहे हैं, और स्ट्रिंग फ़ंक्शंस आमतौर पर केवल कंप्यूटेशंस (आमतौर पर नियमित अभिव्यक्तियों) की एक छोटी श्रेणी को संभालते हैं। यह एक क्लासिक समस्या है जो लोग सरल स्ट्रिंग मैनिपुलेशन के साथ भाषाओं का विश्लेषण करने की कोशिश कर रहे हैं। आप एक गरीब व्यक्ति के पार्सर का उत्पादन करने के लिए अनिवार्य रूप से हैकिंग करके स्ट्रिंग फ़ंक्शंस की लगभग सीमाएं प्राप्त कर सकते हैं, लेकिन यदि आप इसे घातक अधिकार चाहते हैं तो यह आश्चर्यजनक मात्रा में काम हो सकता है, क्योंकि आपको कम से कम रिकर्सिव व्याकरण नियमों को संभालना है जो आपके लिए महत्वपूर्ण हैं निष्कर्षण।

पीएलएसक्यूएल पैकेज के तत्वों तक विश्वसनीय पहुंच प्राप्त करने का एक और तरीका एक भाषा पार्सर का उपयोग करना है। DMS Software Reengineering Toolkit में एक पूर्ण पीएलएसक्यूएल पार्सर है।

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

+0

+1, अच्छा जवाब, और पीएलएसक्यूएल पार्सर के सूचक। – DCookie

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