Получить список всех функций и процедур в базе данных Oracle - PullRequest
44 голосов
/ 30 ноября 2009

Я сравниваю три схемы Oracle.

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

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

Ответы [ 2 ]

93 голосов
/ 30 ноября 2009
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE')

В столбце STATUS указывается, является ли объект VALID или INVALID. Если это неверно, вы должны попробовать перекомпилировать, ORACLE не может сказать вам, будет ли он работать раньше.

6 голосов
/ 30 ноября 2009

Сделайте описание для dba_arguments, dba_errors, dba_procedures, dba_objects, dba_source, dba_object_size. Каждый из них имеет часть изображений для просмотра процедур и функций.

Также тип_объекта в dba_objects для пакетов - это «ПАКЕТ» для определения и «ПАКЕТНЫЙ ТЕЛ» для тело.

Если вы сравниваете схемы в одной базе данных, попробуйте:

select * from dba_objects 
   where schema_name = 'ASCHEMA' 
     and object_type in ( 'PROCEDURE', 'PACKAGE', 'FUNCTION', 'PACKAGE BODY' )
minus
select * from dba_objects 
where schema_name = 'BSCHEMA' 
  and object_type in ( 'PROCEDURE', 'PACKAGE', 'FUNCTION', 'PACKAGE BODY' )

и переключайтесь между порядками ASCHEMA и BSCHEMA.

Если вам также нужно посмотреть на триггеры и сравнить другие вещи между схемами, вам следует взглянуть на статью о том, как спросить Тома о сравнении схем

...