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

C'è un modo per determinare se un pacchetto ha uno stato in Oracle?

Sembra che quello che vuoi sia essere in grado di elencare tutti i pacchetti che potrebbero potenzialmente avere uno stato.

Quello che stai cercando sono solo pacchetti che hanno variabili o costanti globali. Per un singolo pacchetto, questo è abbastanza semplice da ispezionare. Per esaminare tutti i pacchetti in uno schema, tuttavia, puoi utilizzare PL/Scope:

Innanzitutto, accedi come proprietario dello schema, attiva PL/Scope nella tua sessione:

alter session set plscope_settings='IDENTIFIERS:ALL';

Quindi, ricompila tutti i corpi del pacchetto.

Quindi, esegui questa query per trovare tutte le variabili e le costanti dichiarate a livello di pacchetto:

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

Suggerirei che l'elenco risultante di pacchetti sarà il tuo obiettivo.

Se sei su 11gR2, le costanti non causano più questo problema, quindi utilizzeresti invece questa query:

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