sql >> Database teknologi >  >> RDS >> Oracle

Hent en liste over private procedurer/funktioner fra et pakkelegeme

Karakteren af ​​private funktioner er, at de er private. Der er ingen dataordbogsvisninger, der afslører dem som standard. USER_PROCEDURES og USER_ARGUMENTS viser kun oplysninger om offentlige procedurer (dem, der er defineret i en pakkespecifikation0.

Vi kan dog få oplysninger om dem ved hjælp af PL/SCOPE, men at gøre det kræver en lille smule ekstra indsats:

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

Nu kan du finde dine private programenheder med denne forespørgsel:

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

For at få argumenterne for en privat procedure indsæt USAGE_ID fra den forrige forespørgsel i denne forespørgsel:

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
/

Dette skal være en venstre join, fordi user_identifiers har datatypeindgange for skalære datatyper (tegn, tal, dato, clob), men ikke komplekse datatyper (xmltype, brugerdefinerede typer).

Vi kan få masser af information om procedurer fra PL/SCOPE, selvom det ikke er så nemt som at forespørge USER_PROCEDURES eller USER_ARGUMENTS (faktisk er det overraskende klodset). Find ud af mere. Vær opmærksom på, at PL/SCOPE-data er gemt på SYSAUX tablespace, så kom ikke i varmt vand med din DBA!




  1. Beregning og pladsbesparelse i PostgreSQL

  2. Sådan opretter du en udvidelse til SSMS 2019 (v18)

  3. Sådan indsætter du en klat i en database ved hjælp af sql server management studio

  4. hvordan man tildeler cte-værdi til variabel