sql >> Base de Datos >  >> RDS >> Oracle

¿Hay alguna forma de determinar si un paquete tiene estado en Oracle?

Parece que lo que desea es poder enumerar todos los paquetes que potencialmente pueden tener estado.

Lo que está buscando son solo paquetes que tengan variables o constantes globales. Para un solo paquete, esto es bastante simple mediante inspección. Sin embargo, para buscar todos los paquetes en un esquema, puede usar PL/Scope:

Primero, inicie sesión como propietario del esquema, active PL/Scope en su sesión:

alter session set plscope_settings='IDENTIFIERS:ALL';

Luego, vuelva a compilar todos los cuerpos de sus paquetes.

Luego, ejecute esta consulta para encontrar todas las variables y constantes declaradas a nivel de paquete:

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

Sugeriría que la lista resultante de paquetes sea su objetivo.

Si está en 11gR2, las constantes ya no causan este problema, por lo que usaría esta consulta en su lugar:

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