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