Какой SQL я должен использовать для перечисления всех хранимых процедур в базе данных Oracle?
Если возможно, мне бы хотелось получить два запроса:
- список всех хранимых процедур по имени
- введите код хранимой процедуры, указав имя
Какой SQL я должен использовать для перечисления всех хранимых процедур в базе данных Oracle?
Если возможно, мне бы хотелось получить два запроса:
В представлении 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_
содержат только те объекты, к которым вы можете получить доступ.
Если вы хотите получить все вызовы для интроспекции хранимых процедур (параметров и т.д.), вы можете вытащить его из этого пакета с открытым исходным кодом:
http://code.google.com/p/orapig
OraPIG - это генератор интерфейса Oracle Python. Он анализирует пакеты oracle и создает для них оболочки python.
Я думаю, что перечисление из 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