Подтвердить что ты не робот

Запрос для поиска всех пакетов для таблицы и/или столбца

Есть ли запрос, который я могу запустить, чтобы искать все пакеты, чтобы увидеть, используется ли конкретная таблица и/или столбец в пакете? Слишком много пакетов, чтобы открыть каждый из них и найти найденные значения (ы), которые я ищу.

4b9b3361

Ответ 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|,|\)|$)