Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Existe alguma maneira de determinar se um pacote tem estado no Oracle?


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