Oracle
 sql >> база данни >  >> RDS >> Oracle

Има ли някакъв начин да се определи дали даден пакет има състояние в Oracle?

Изглежда, че това, което искате, е да можете да изброите всички пакети, които потенциално могат да имат състояние.

Това, което търсите, са само пакети, които имат глобални променливи или константи. За един пакет това е доста лесно чрез проверка. За да разгледате всички пакети в схема обаче, можете да използвате PL/Scope:

Първо влезте като собственик на схемата, включете PL/Scope във вашата сесия:

alter session set plscope_settings='IDENTIFIERS:ALL';

След това прекомпилирайте всичките си тела на пакети.

След това изпълнете тази заявка, за да намерите всички променливи и константи, декларирани на ниво пакет:

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

Предполагам, че полученият списък с пакети ще бъде вашата цел.

Ако сте на 11gR2, константите вече не причиняват този проблем, така че вместо това бихте използвали тази заявка:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получа идентификатор за последно вмъкване в Oracle с помощта на MyBatis?

  2. SQL брой за колона с дата

  3. Oracle еквивалент на съвети за заявка ROWLOCK, UPDLOCK, READPAST

  4. Подзаявка с грешка в невалиден идентификатор в sql

  5. Функция Thousand Seperator в Oracle?