Какой SQL мне нужно будет использовать для перечисления всех хранимых процедур в базе данных Oracle?

Какой SQL я должен использовать для перечисления всех хранимых процедур в базе данных Oracle?

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

  • список всех хранимых процедур по имени
  • введите код хранимой процедуры, указав имя

Ответ 1

В представлении DBA_OBJECTS будут перечислены процедуры (а также почти любой другой объект):

SELECT owner, object_name
FROM dba_objects 
WHERE object_type = 'PROCEDURE'

В представлении DBA_SOURCE будут перечислены строки исходного кода для рассматриваемой процедуры:

SELECT line, text
FROM dba_source
WHERE owner = ?
  AND name = ?
  AND type = 'PROCEDURE'
ORDER BY line

Примечание.. В зависимости от ваших привилегий вы не сможете запросить представления DBA_OBJECTS и DBA_SOURCE. В этом случае вы можете использовать ALL_OBJECTS и ALL_SOURCE. Представления DBA_ содержат все объекты в базе данных, тогда как представления ALL_ содержат только те объекты, к которым вы можете получить доступ.

Ответ 2

Если вы хотите получить все вызовы для интроспекции хранимых процедур (параметров и т.д.), вы можете вытащить его из этого пакета с открытым исходным кодом:

http://code.google.com/p/orapig

OraPIG - это генератор интерфейса Oracle Python. Он анализирует пакеты oracle и создает для них оболочки python.

Ответ 3

Я думаю, что перечисление из DBA_OBJECTS, возможно, пропустило множество процедур: (Я нахожусь на Oracle 12c, войдите в систему как SYS)

select count(*) from dba_objects where object_type = 'PROCEDURE';
       202

Было действительно невозможно, что вся база данных ORACLE может иметь только 202 процедуры.

И запрос из DBA_PROCEDURES:

select owner||'-'||object_name || '-'||procedure_name from
dba_procedures WHERE PROCEDURE_NAME IS NOT NULL;

26539 rows selected.

Теперь, сосредоточив внимание на схеме SYS, которая по умолчанию используется для каждой базы данных (не уникальной для моей):

Запрос для ANONYMOUS хранимых процедур (http://www.praetoriate.com/t_high_perform_calling_procedures.htm), принадлежащих SYS:

select owner||'-'||object_name || '-'||procedure_name from dba_procedures WHERE PROCEDURE_NAME IS NULL and owner = 'SYS';
994 rows selected.

И не-анонимные хранимые процедуры SYS имеют значение 15K:

select owner||'-'||object_name || '-'||procedure_name from dba_procedures WHERE PROCEDURE_NAME IS NOT NULL and owner = 'SYS';
15408 rows