2010-05-18 10 views
9

का उपयोग कर ओरेकल पैकेज के भीतर एक प्रक्रिया के लिए संग्रहित प्रक्रिया मेटाडेटा प्राप्त करें, मैं मानक का उपयोग करते हुए ओरेकल पैकेज में घोषित प्रक्रिया के लिए संग्रहीत प्रक्रिया मेटाडेटा (प्रक्रिया का नाम, पैरामीटर प्रकार, पैरामीटर नाम आदि) प्राप्त करने का प्रयास कर रहा हूं ADO.NET API - DbConnection.GetSchema कॉल करें। मैं ओडीपी चालक का उपयोग कर रहा हूँ।एडीओ.NET

मुझे लगता है कि पैकेज 'पैकेज' और 'पैकेजबॉडी' मेटाडेटा संग्रह में सूचीबद्ध है। प्रक्रिया पैरामीटर 'तर्क' और 'प्रक्रिया पैरामीटर' संग्रह में प्रकट होता है। मुझे पैकेज मेटाडेटा के माध्यम से प्रक्रिया की जानकारी प्राप्त करने का कोई तरीका नहीं दिख रहा है। यहां तक ​​कि यदि प्रक्रिया में कोई पैरामीटर नहीं है, तो इस प्रक्रिया के लिए 'प्रक्रिया पैरामीटर' संग्रह में एक पंक्ति है।

मेरा प्रश्न: प्रक्रिया मेटाडेटा प्राप्त करने के लिए मुझे 'प्रक्रिया पैरामीटर' संग्रह से पूछताछ करना होगा और आवश्यक पैकेज नाम के साथ एक प्रविष्टि की खोज करनी होगी? मैं पैरामीटर जानकारी के आधार पर प्रक्रिया मेटाडेटा का निर्माण कर सकता हूं। क्या एक ही जानकारी प्राप्त करने के लिए एक छोटा या तेज तरीका है?

उत्तर

8

बॉब से सहायता के साथ मैंने पैकेज में परिभाषित संग्रहीत प्रक्रियाओं की एक सूची प्राप्त करने के लिए निम्न क्वेरी का उपयोग किया है।

SELECT a.OBJECT_NAME,p.PROCEDURE_NAME FROM SYS.ALL_OBJECTS a, SYS.ALL_PROCEDURES p WHERE a.OBJECT_NAME = p.OBJECT_NAME AND a.OBJECT_TYPE = 'PACKAGE' AND a.OWNER = '" + ownerName + "' AND p.PROCEDURE_NAME IS NOT NULL" 

यह किसी विशेष उपयोगकर्ता के लिए सभी संग्रहीत प्रक्रियाओं को लौटाता है। इसके बाद मैं उनके लिए पैरामीटर जानकारी प्राप्त करने के लिए 'प्रक्रिया पैरामीटर' संग्रह का उपयोग कर सकता हूं।

नोट: SYS.DBA_PROCEDURES तालिका से पूछताछ न करें। आपके द्वारा क्वेरी निष्पादित करने के लिए उपयोग किए जाने वाले उपयोगकर्ता प्रमाण-पत्रों में उस तालिका पर 'चयन' विशेषाधिकार नहीं हो सकते हैं।

15

मुझे यकीन है कि कैसे आप इस ADO.NET का उपयोग कर पाने चाहते हैं नहीं कर रहा हूँ, लेकिन इस प्रकार आप सीधे डेटाबेस क्वेरी यह जानकारी प्राप्त कर सकते हैं:

SELECT * 
    FROM SYS.DBA_PROCEDURES 
    WHERE OBJECT_TYPE = 'PACKAGE' AND 
     OBJECT_NAME = '<your package name here>' AND 
     PROCEDURE_NAME IS NOT NULL; 

एक बार जब आप ऊपर क्वेरी आप चलाते हैं एक परिणाम सेट होगा जिसमें अन्य चीजों के अलावा PROCEDURE_NAME होगा। पैकेज नाम और PROCEDURE_NAME को देखते हुए, आप निम्न क्वेरी का उपयोग कर पैरामीटर जानकारी पा सकते हैं:

SELECT * 
    FROM SYS.ALL_ARGUMENTS 
    WHERE PACKAGE_NAME = '<your package name here>' AND 
     OBJECT_NAME = '<PROCEDURE_NAME from query above>'; 

साझा करें और आनंद लें।

+0

इसके लिए धन्यवाद। मैंने sps की सूची प्राप्त करने के लिए क्वेरी को थोड़ा सा संशोधित किया है। SYS.DBA_PROCEDURES में कोई 'OBJECT_TYPE' कॉलम नहीं है। मैं ओरेकल 10.2.0.1.0 का उपयोग कर रहा हूँ – alwayslearning

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