Я бы получил имя пакета от all_objects
, потому что оно все равно есть.
Парсинг комментария должен быть выполнимым. Просто найдите строку, которая начинается с * Description:
, и возьмите оставшуюся часть этой строки.
REGEXP_SUBSTR
может быть хорошей функцией для анализа или некоторых базовых строковых функций, таких как:
select
o.OWNER,
o.OBJECT_NAME,
( select
MIN(TRIM(SUBSTR(s.TEXT, INSTR(s.TEXT, 'Description:') + 12)))
from
ALL_SOURCE s
where
s.NAME = o.OBJECT_NAME
and s.OWNER = o.OWNER
and s.LINE <= 5
and s.TEXT like '% Description:%') as DESCRIPTION
from
ALL_OBJECTS o
where
o.OBJECT_TYPE = 'PACKAGE';
Следует отметить, что эта проверка немного грубовата. Теоретически текст Description:
также может быть частью некоторого кода или запроса, поэтому теоретически вы можете получить ложное срабатывание и получить странное описание.
Кроме того, эта проверка довольно строгая. Если вы ввели description
(строчные буквы) или description :
(пробел перед двоеточием) или *Description:
(пробел между звездочкой и словом отсутствует), совпадения не будет.
Кроме того, я использовал MIN
для получения любых описаний на случай, если их несколько. Лично я думаю, что хорошо ловить крайние случаи как это. Вы также можете использовать LIST_AGG
, чтобы вернуть все из них, что дает большое преимущество, позволяя использовать многострочные описания ...:)