Какой SQL мне нужно использовать для отображения всех хранимых процедур в базе данных Oracle? - PullRequest
14 голосов
/ 05 июня 2009

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

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

  1. список всех хранимых процедур по имени
  2. перечислить код хранимой процедуры с именем

Ответы [ 3 ]

26 голосов
/ 05 июня 2009

В представлении 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_ содержат только те объекты, к которым вы можете получить доступ.

0 голосов
/ 25 января 2017

Я думаю, что перечисление из 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, которая устанавливается по умолчанию для каждой базы данных (не уникальной для моей):

Запрос анонимных хранимых процедур (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
0 голосов
/ 07 июня 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...