Запрос для поиска во всех пакетах таблицы и / или столбца - PullRequest
33 голосов
/ 31 января 2011

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

Ответы [ 4 ]

61 голосов
/ 31 января 2011

Вы можете сделать это:

select *
from user_source
where upper(text) like upper('%SOMETEXT%');

В качестве альтернативы, SQL Developer имеет встроенный отчет для этого в:

View > Reports > Data Dictionary Reports > PLSQL > Search Source Code

Документы 11G для USER_SOURCE здесь

8 голосов
/ 31 января 2011

вы можете использовать представления *_DEPENDENCIES, например:

SELECT owner, NAME
  FROM dba_dependencies
 WHERE referenced_owner = :table_owner
   AND referenced_name = :table_name
   AND TYPE IN ('PACKAGE', 'PACKAGE BODY')
0 голосов
/ 22 августа 2016

Кстати, если вам нужно добавить другие символы, такие как «(» или «)», поскольку столбец можно использовать как «UPPER (bqr)», то эти параметры можно добавить в списки до и послесимволы.

(\s|\(|\.|,|^)bqr(\s|,|\)|$)
0 голосов
/ 22 августа 2016

Иногда столбец, который вы ищете, может быть частью названия многих других вещей, которые вас не интересуют.

Например, я недавно искал столбец с именем "BQR", который также является частью многих других столбцов, таких как "BQR_OWNER", "PROP_BQR" и т. Д.

Поэтому я бы хотел установить флажок, чтобы текстовые процессоры указывали «Только целые слова».

К сожалению, LIKE не имеет такой функциональности, но REGEXP_LIKE может помочь.

SELECT *
  FROM user_source
 WHERE regexp_like(text, '(\s|\.|,|^)bqr(\s|,|$)');

Это регулярное выражение, чтобы найти этот столбец и исключить другие столбцы с «BQR» как часть имени:

(\s|\.|,|^)bqr(\s|,|$)

Регулярное выражение соответствует пробелу (\ s), или (|) точка (.), (|) Запятая (,) или (|) начало строки (^), за которым следует "bqr ", затем пробел, запятая или конец строки ($).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...