Есть ли запрос, который я могу запустить, чтобы искать все пакеты, чтобы увидеть, используется ли конкретная таблица и/или столбец в пакете? Слишком много пакетов, чтобы открыть каждый из них и найти найденные значения (ы), которые я ищу.
Запрос для поиска всех пакетов для таблицы и/или столбца
Ответ 1
Вы можете сделать это:
select *
from user_source
where upper(text) like upper('%SOMETEXT%');
В качестве альтернативы SQL Developer имеет встроенный отчет для этого:
View > Reports > Data Dictionary Reports > PLSQL > Search Source Code
Документы 11G для USER_SOURCE здесь
Ответ 2
вы можете использовать представления *_DEPENDENCIES
, например:
SELECT owner, NAME
FROM dba_dependencies
WHERE referenced_owner = :table_owner
AND referenced_name = :table_name
AND TYPE IN ('PACKAGE', 'PACKAGE BODY')
Ответ 3
Иногда колонка, которую вы ищете, может быть частью имени многих других вещей, которые вас не интересуют.
Например, я недавно искал столбец "BQR", который также является частью многих других столбцов, таких как "BQR_OWNER", "PROP_BQR" и т.д.
Поэтому я хотел бы иметь флажок, который текстовые процессоры должны указывать только на "Только целые слова".
К сожалению, LIKE не имеет такой функции, но REGEXP_LIKE может помочь.
SELECT *
FROM user_source
WHERE regexp_like(text, '(\s|\.|,|^)bqr(\s|,|$)');
Это регулярное выражение, чтобы найти этот столбец и исключить другие столбцы с "BQR" как часть имени:
(\s|\.|,|^)bqr(\s|,|$)
Регулярное выражение соответствует пробелу (\ s) или (|) period (.) или (|) comma (,) или (|) start-of-line (^), за которым следует "bqr", за которым следует пробел, запятая или конец строки ($).
Ответ 4
Кстати, если вам нужно добавить другие символы, такие как "(" или ")", потому что столбец можно использовать как "UPPER (bqr)", то эти параметры могут быть добавлены в списки до и после символы.
(\s|\(|\.|,|^)bqr(\s|,|\)|$)