SQL для поиска объектов, включая хранимые процедуры, в Oracle

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

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

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


person Glenn Wark    schedule 12.05.2009    source источник
comment
Хороший ресурс: techonthenet.com/oracle/sys_tables   -  person Glenn Wark    schedule 18.09.2013


Ответы (6)


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

select * from user_source
person Drevak    schedule 12.05.2009
comment
Это не работает для просмотров - person IEnjoyEatingVegetables; 11.05.2021

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

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

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

Для представлений вы можете использовать:

SELECT *
FROM dba_views
WHERE instr(UPPER(text_vc), UPPER(:srch_str)) > 0
person Chris Cameron-Mills    schedule 12.05.2009
comment
используйте SELECT owner, name, type FROM dba_source WHERE instr(UPPER(name), UPPER(':srch_strg')) > 0; для поиска только по именам .. может быть более практичным для некоторых - person mcvkr; 21.07.2017
comment
Этот подход хорош, потому что вы можете фильтровать «тип» объектов. (WHERE type = 'PROCEDURE') при необходимости .. Избавляет вас от прохождения всех других типов, если вы знаете, что это процедура или, возможно, функция (например ...) - person Martin; 06.05.2020
comment
Это не работает для просмотров - person IEnjoyEatingVegetables; 11.05.2021
comment
@IEnjoyEatingVegetables Я отредактировал ответ, чтобы включить представление словаря данных, которое вы можете использовать для поиска представлений - person Chris Cameron-Mills; 26.05.2021

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

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

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

Последняя строка предотвращает возврат всех системных данных (DBMS_ и др.). Это будет работать в user_source, если вам просто нужна ваша собственная схема.

person Steve Ronaldson Ewing    schedule 24.10.2013
comment
[PLUS ONE] Это просто спасло мне день! - person GingerHead; 05.04.2016
comment
[PLUS ONE], потому что вам не нужны права администратора - person ihebiheb; 20.05.2021

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

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

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

введите описание изображения здесь

person Newton fan 01    schedule 03.04.2018

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

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

select * from ALL_SOURCE where text like '%some string%';
person Sireesh Yarlagadda    schedule 09.03.2015

В Oracle 11g, если вы хотите искать любой текст во всей базе данных или процедуру, можно использовать указанный ниже запрос:

выберите * from user_source ГДЕ ВВЕРХ (текст) LIKE '% YOUR SAGE%'

person Yoshita Mahajan    schedule 09.10.2020