Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Gibt es eine Möglichkeit festzustellen, ob ein Paket in Oracle einen Status hat?

Es hört sich so an, als ob Sie alle Pakete auflisten möchten, die möglicherweise einen Status haben.

Was Sie suchen, sind nur Pakete, die globale Variablen oder Konstanten haben. Für ein einzelnes Paket ist dies ganz einfach durch Inspektion. Um jedoch alle Pakete in einem Schema zu durchsuchen, könnten Sie PL/Scope verwenden:

Melden Sie sich zuerst als Schemabesitzer an und aktivieren Sie PL/Scope in Ihrer Sitzung:

alter session set plscope_settings='IDENTIFIERS:ALL';

Kompilieren Sie dann alle Ihre Paketkörper neu.

Führen Sie dann diese Abfrage aus, um alle auf Paketebene deklarierten Variablen und Konstanten zu finden:

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

Ich würde vorschlagen, dass die resultierende Liste von Paketen Ihr Ziel sein wird.

Wenn Sie 11gR2 verwenden, verursachen Konstanten dieses Problem nicht mehr, also verwenden Sie stattdessen diese Abfrage:

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