sql >> Databáze >  >> RDS >> Oracle

Získejte seznam soukromých procedur/funkcí z těla balíčku

Povahou soukromých funkcí je, že jsou soukromé. Neexistují žádná zobrazení datového slovníku, která je ve výchozím nastavení odhalují. USER_PROCEDURES a USER_ARGUMENTS zobrazují pouze informace pro veřejné procedury (ty definované v balíčku spec0.

Můžeme o nich však získat informace pomocí PL/SCOPE, ale to vyžaduje trochu dalšího úsilí:

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

Nyní můžete najít své soukromé programové jednotky pomocí tohoto dotazu:

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 
);

Chcete-li získat argumenty soukromé procedury, připojte USAGE_ID z předchozího dotazu do tohoto dotazu:

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
/

Toto musí být levé spojení, protože user_identifiers má položky datových typů pro skalární datové typy (znak, číslo, datum, clob), ale ne komplexní datové typy (xmltype, uživatelem definované typy).

Můžeme získat spoustu informací o procedurách z PL/SCOPE, i když to není tak snadné jako dotazování USER_PROCEDURES nebo USER_ARGUMENTS (ve skutečnosti je to překvapivě neohrabané). Zjistit více. Uvědomte si, že data PL/SCOPE jsou uložena v tabulkovém prostoru SYSAUX, takže se s vaším DBA nedostaňte do horké vody!




  1. Mysql počítá instance podřetězce a poté seřaďte podle

  2. Jak se liší PostgreSQL od MySQL?

  3. Začínáme s MariaDB pomocí Docker, Java Spring a JDBC

  4. Příkaz ALTER TABLE byl v konfliktu s omezením FOREIGN KEY