sql >> Databasteknik >  >> RDS >> Oracle

Finns det något sätt att avgöra om ett paket har tillstånd i Oracle?

Det låter som att det du vill är att kunna lista alla paket som potentiellt kan ha tillstånd.

Det du letar efter är bara paket som har några globala variabler eller konstanter. För ett enstaka paket är detta ganska enkelt genom inspektion. För att se över alla paket i ett schema kan du dock använda PL/Scope:

Logga först in som schemaägare, aktivera PL/Scope i din session:

alter session set plscope_settings='IDENTIFIERS:ALL';

Kompilera sedan om alla dina paketkroppar.

Kör sedan den här frågan för att hitta alla variabler och konstanter som deklareras på paketnivå:

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

Jag föreslår att den resulterande listan med paket är ditt mål.

Om du använder 11gR2 orsakar konstanter inte längre detta problem, så du skulle använda den här frågan istället:

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



  1. PHP/MySQL gruppera resultat efter kolumn

  2. MYSQL UNION BESTÄLLNING

  3. Mysql Regex för att ersätta 0 från ipv4

  4. Hur man höjer anpassat Postgresql-fel och hanterar det i Ecto