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. Само архивиране на SQL схема?

  2. 4 начина за намиране на редове, които съдържат главни букви в Oracle

  3. Защо е поискано невалидно преобразуване КОД НА ГРЕШКА:17132?

  4. oracle sql заявка за изброяване на всички дати от предходния месец

  5. Създайте електронна таблица на Excel от база данни на Oracle