Поиск упакованных пакетов/процедур в Oracle SQL

Простой вопрос, но поиск в Google и SO ничего не дал.

Кто-нибудь знает, можно ли выполнить поиск в словаре данных Oracle, чтобы найти все завернутые (которые были запутаны с помощью утилиты «wrap») пакеты/процедуры?

Спасибо, Джон.


person gnuchu    schedule 17.02.2011    source источник


Ответы (2)


Вы должны проверить первую строку исходного кода:

select type, owner, name
from all_source
where line = 1
  and instr(text, 'wrapped') > 1;

За исключением очень длинных обернутых пакетов, обернутые типы обычно имеют весь код в одной строке (строка 1), в то время как развернутые типы имеют отдельную строку для каждой строки исходного кода.

person Codo    schedule 17.02.2011

Поиск текста 'wrapped' в строке 1 с использованием all_source/user_source показывает завернутые объекты. Но это может сломаться, если само имя юнита содержит текст «обернутый», вместо этого вы можете использовать:

select u.object_name
  from sys.procedure$ p, user_objects u
 where u.object_id = obj#
   AND bitand(p.options, 2) <> 0;

Полное представление объекта базы данных:

select d.owner,
       d.object_name,
       case bitand(p.options, 2)
         when 0 then
          'PLAIN'
         else
          'WRAPPED'
       end wrapped
  from sys.procedure$ p, dba_objects d
 where d.object_id = obj#
   and d.owner = USER;
person Rajeev Sreedharan    schedule 29.03.2021
comment
Я подозреваю, что базы данных Oracle могли немного измениться за десятилетие, прошедшее с тех пор, как я впервые задал этот вопрос. - person gnuchu; 30.03.2021