Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

पैकेज बॉडी से निजी प्रक्रियाओं/कार्यों की सूची प्राप्त करें

निजी कार्यों की प्रकृति यह है कि वे निजी होते हैं। कोई डेटा डिक्शनरी दृश्य नहीं हैं जो उन्हें डिफ़ॉल्ट रूप से उजागर करते हैं। USER_PROCEDURES और USER_ARGUMENTS केवल सार्वजनिक प्रक्रियाओं के लिए जानकारी दिखाते हैं (वे जो एक पैकेज spec0 में परिभाषित हैं।

हालाँकि, हम PL/SCOPE का उपयोग करके उनके बारे में जानकारी प्राप्त कर सकते हैं, लेकिन ऐसा करने के लिए थोड़े अतिरिक्त प्रयास की आवश्यकता होती है:

  1. SQL> alter session set plscope_settings='IDENTIFIERS:ALL';
  2. SQL> alter package your_package compile body;

अब आप इस क्वेरी के साथ अपनी निजी कार्यक्रम इकाइयाँ पा सकते हैं:

select ui.type, ui.name, ui.usage_id
from user_identifiers ui
where ui.object_name = 'YOUR_PACKAGE'
and ui.usage = 'DEFINITION'
and ui.type in ('PROCEDURE', 'FUNCTION')
minus
( select 'PROCEDURE', upr.procedure_name 
  from user_procedures upr
  where upr.object_name = 'YOUR_PACKAGE'
  union
  select 'FUNCTION', uarg.object_name
  from user_arguments uarg
  where uarg.package_name = 'YOUR_PACKAGE'
  and uarg.position = 0 
);

निजी प्रक्रिया के तर्क प्राप्त करने के लिए पिछली क्वेरी से USAGE_ID को इस क्वेरी में प्लग करें:

select ui.name
       , ui.type
       , ui.usage_id
       , ui2.type as param_datatype
from user_identifiers ui
     left join user_identifiers ui2
        on ui2.usage_context_id = ui.usage_id 
where ui.object_name = 'YOUR_PACKAGE'
and ui.usage = 'DECLARATION'
and ui.usage_context_id = :private_proc_usage_id
/

इसे लेफ्ट जॉइन करने की आवश्यकता है क्योंकि user_identifiers स्केलर डेटाटाइप (चरित्र, संख्या, दिनांक, क्लोब) के लिए डेटाटाइप प्रविष्टियां हैं, लेकिन जटिल डेटाटाइप (xmltype, उपयोगकर्ता-परिभाषित प्रकार) नहीं हैं।

हम PL/SCOPE से प्रक्रियाओं के बारे में बहुत सारी जानकारी प्राप्त कर सकते हैं, भले ही यह USER_PROCEDURES या USER_ARGUMENTS को क्वेरी करने जितना आसान नहीं है (वास्तव में, यह आश्चर्यजनक रूप से भद्दा है)। और अधिक जानकारी प्राप्त करें। सावधान रहें कि PL/SCOPE डेटा SYSAUX टेबलस्पेस पर संग्रहीत है, इसलिए अपने DBA के साथ गर्म पानी में न जाएं!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. dbms_output आकार बफर अतिप्रवाह

  2. 12c डेटाफ़ाइलों को ऑनलाइन ले जाएँ

  3. Oracle PL/SQL - संग्रह (नेस्टेड टेबल्स)

  4. Oracle में लॉक की गई पंक्तियों को कैसे खोजें

  5. Oracle regexp_replace द्वारा अंतरिक्ष से अलग की गई सूची से डुप्लिकेट कैसे निकालें?