Parece que o que você quer é poder listar todos os pacotes que podem potencialmente ter estado.
O que você está procurando são apenas pacotes que tenham variáveis ou constantes globais. Para um único pacote, isso é bastante simples por inspeção. Para examinar todos os pacotes em um esquema, no entanto, você pode usar PL/Scope:
Primeiro, faça login como proprietário do esquema, ative o PL/Scope em sua sessão:
alter session set plscope_settings='IDENTIFIERS:ALL';
Em seguida, recompile todos os seus corpos de pacote.
Em seguida, execute esta consulta para encontrar todas as variáveis e constantes declaradas no nível do pacote:
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'
);
Eu sugiro que a lista resultante de pacotes seja seu alvo.
Se você estiver no 11gR2, as constantes não causarão mais esse problema, então você usaria esta consulta:
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'
);