SQL для поиска объектов, включая хранимые процедуры, в Oracle - PullRequest
25 голосов
/ 12 мая 2009

Мне нужно написать несколько sql, которые позволят мне запрашивать все объекты в нашей базе данных Oracle. К сожалению, инструменты, которые нам разрешено использовать, не имеют этого встроенного. По сути, мне нужно искать все таблицы, процедуры, триггеры, представления, все.

Я знаю, как искать имена объектов. Но мне нужно искать содержимое объекта. т.е. SELECT * FROM DBA_OBJECTS WHERE имя_объекта = '% строка поиска%';

Спасибо, Гленн

Ответы [ 5 ]

30 голосов
/ 12 мая 2009

Я не уверен, что полностью понимаю вопрос, но если вы хотите искать объекты в базе данных по определенной строке поиска, попробуйте:

SELECT owner, name, type, line, text 
FROM dba_source
WHERE instr(UPPER(text), UPPER(:srch_str)) > 0;

Оттуда, если вам нужна дополнительная информация, вы можете просто найти номер объекта / строки.

18 голосов
/ 12 мая 2009

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

select * from user_source
9 голосов
/ 24 октября 2013

Я бы использовал DBA_SOURCE (если у вас есть к нему доступ), потому что если требуемый объект не принадлежит схеме, под которой вы вошли, вы его не увидите.

Если вам нужно знать функции и Procs внутри пакетов, попробуйте что-то вроде этого:

select * from all_source
 where type = 'PACKAGE'
   and (upper(text) like '%FUNCTION%' or upper(text) like '%PROCEDURE%')
   and owner != 'SYS';

Последняя строка запрещает возвращение всей системной информации (DBMS_ et al). Это будет работать в user_source, если вы просто хотите использовать свои собственные элементы схемы.

4 голосов
/ 03 апреля 2018

я дошел до этого вопроса, пытаясь найти все процедуры, которые используют определенную таблицу

Oracle SQL Developer предлагает эту возможность, как указано в этой статье: https://www.thatjeffsmith.com/archive/2012/09/search-and-browse-database-objects-with-oracle-sql-developer/

В меню «Вид» выберите «Найти объект БД». Выберите соединение с БД. Введите название таблицы. В типах объектов оставьте только функции, процедуры и пакеты. В разделе «Код» отметьте «Все строки исходного кода».

enter image description here

2 голосов
/ 09 марта 2015

ALL_SOURCE описывает источник текста хранимых объектов, доступных текущему пользователю.

Вот одно из решений

select * from ALL_SOURCE where text like '%some string%';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...