Получить список всех функций и процедур в базе данных Oracle

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

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

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


person AJM    schedule 30.11.2009    source источник


Ответы (3)


SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE')

Столбец STATUS сообщает вам, является ли объект ДЕЙСТВИТЕЛЬНЫМ или НЕДЕЙСТВИТЕЛЬНЫМ. Если он недействителен, вам нужно попробовать перекомпилировать, ORACLE не может сказать вам, будет ли он работать раньше.

person Erich Kitzmueller    schedule 30.11.2009
comment
'TABLE' Может кто-нибудь подсказать, как удалить функции/процедуры/пакеты? - person Bitterblue; 25.06.2014
comment
Кто-то предложил отредактировать мой ответ, чтобы оператор SELECT выбирал только OBJECT_NAME вместо *. В любом случае, это редактирование было отклонено (кроме меня рецензентами); IMO, по крайней мере, следует выбрать OBJECT_NAME, OBJECT_TYPE, STATUS, чтобы получить полезный результат. Тем не менее, SELECT * не повредит в этом контексте. - person Erich Kitzmueller; 06.11.2014
comment
Если у вас несколько пользователей и вы хотите перечислить объекты только для этого пользователя, просто добавьте еще одно предложение AND OWNER =[THAT USER NAME] . Пример для пользователя1: SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE') AND OWNER = 'user1' - person LifeiSHot; 13.07.2017
comment
Этого ответа недостаточно, если вы хотите сравнить функции и процедуры внутри пакета. - person cartbeforehorse; 07.09.2018

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

Также object_type в dba_objects для пакетов — это «PACKAGE» для определения и «PACKAGE BODY» для тела.

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

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.

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

person Philip Schlump    schedule 30.11.2009

 SELECT * FROM all_procedures WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE') 
 and owner = 'Schema_name' order by object_name

здесь «Schema_name» — это имя схемы, например, у меня есть схема с именем PMIS, поэтому пример будет

SELECT * FROM all_procedures WHERE OBJECT_TYPE IN ('FUNCTION','PROCEDURE','PACKAGE') 
and owner = 'PMIS' order by object_name

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

Ссылка: https://www.plsql.co/list-all-procedures-from-a-schema-of-oracle-database.html

person Md. Salman Fahad Famous    schedule 27.07.2020