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

Er der nogen måde at afgøre, om en pakke har tilstand i Oracle?

Det lyder som om, hvad du ønsker, er at være i stand til at liste alle pakker, der potentielt kan have status.

Det, du leder efter, er kun pakker, der har nogen globale variabler eller konstanter. For en enkelt pakke er dette ganske enkelt ved inspektion. For at se på tværs af alle pakker i et skema, kan du dog bruge PL/Scope:

Først skal du logge ind som skemaejer, slå PL/Scope til i din session:

alter session set plscope_settings='IDENTIFIERS:ALL';

Genkompilér derefter alle dine pakketekster.

Kør derefter denne forespørgsel for at finde alle variabler og konstanter, der er erklæret på pakkeniveau:

select object_name AS package,
       type,
       name AS variable_name
from user_identifiers
where object_type IN ('PACKAGE','PACKAGE BODY')
and usage = 'DECLARATION'
and type in ('VARIABLE','CONSTANT')
and usage_context_id in (
  select usage_id
  from user_identifiers
  where type = 'PACKAGE'
  );

Jeg vil foreslå, at den resulterende liste over pakker vil være dit mål.

Hvis du er på 11gR2, forårsager konstanter ikke længere dette problem, så du ville bruge denne forespørgsel i stedet:

select object_name AS package,
       type,
       name AS variable_name
from user_identifiers
where object_type IN ('PACKAGE','PACKAGE BODY')
and usage = 'DECLARATION'
and type = 'VARIABLE'
and usage_context_id in (
  select usage_id
  from user_identifiers
  where type = 'PACKAGE'
  );



  1. Heroku Connect med Cakephp v3.0.12

  2. MYSQL - Valg af data fra anden række i en stor tabel

  3. MySQL Slet med Group By

  4. Sådan opretter du forbindelse til Oracle ved hjælp af Service Name i stedet for SID