Как вы можете определить, используется ли PL/SQL-пакет, процедура или функция?
Как вы можете определить, используется ли PL/SQL-пакет, процедура или функция? Существует ли таблица или представление Oracle, которая содержит статистику использования PL/SQL пакетов, процедур или функций?
Ответы
Ответ 1
Вы также можете попробовать выполнить запрос USER/ALL_source:
SELECT * FROM all_source
where UPPER(TEXT) like UPPER('%procedure_name%')
или
SELECT * FROM all_source
where UPPER(TEXT) like UPPER('%package.function_name%')
Вам придется игнорировать собственные ссылки, но это должно быть легко обнаружить.
Вам также нужно будет проверить источник "view" от пользователя /all _views. См. Другой вопрос о запросе источника просмотра, хотя.
вы также можете проверить, используется ли функция/процедура пакета или верхнего уровня с помощью
select * from all_dependencies
where referenced_name like '%PACKAGE_NAME%';
NB: переключите пользователя_ с помощью all_/dba_ по мере необходимости
если вы специально ищете невостребованные функции, тогда еще один вариант заключается в компиляции кода с включенными ПРЕДУПРЕЖДЕНИЯми, а затем поиск PLW-06002 и LPW-06006
exec DBMS_WARNING.add_warning_setting_cat('ALL','ENABLE','SESSION')
create or replace function x return number
as
procedure y is begin null; end;
begin
return 0;
return 1;
end;
show errors
Errors for FUNCTION X:
LINE/COL ERROR
-------- -----------------------------------------------------------------
1/1 PLW-05018: unit X omitted optional AUTHID clause; default value DEFINER used
3/1 PLW-06006: uncalled procedure "Y" is removed.
6/1 PLW-06002: Unreachable code
Ответ 2
Не по умолчанию. Но вы можете использовать функциональные возможности аудита вашей базы данных Oracle. В Ask Tom длинный поток об аудите вызовов процедур!
Ответ 3
Если вы используете Oracle 11 (R2?), я бы дал шанс PL/Scope
.
В документе указано: PL/Scope - это инструмент, управляемый компилятором, который собирает данные об идентификаторах в исходном коде PL/SQL на время компиляции блока программ и делает его доступным в виде статического словаря данных. Собранные данные включают информацию о типах идентификаторов, обычаях (декларации, определении, ссылке, вызове, назначении) и местоположении каждого использования в исходном коде.
PL/Scope позволяет создавать мощные и эффективные браузеры исходного кода PL/Scope, которые увеличивают PL/SQL
производительности разработчика, минимизируя время, затрачиваемое на просмотр и понимание исходного кода.
Подробнее об этом можно узнать на http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17125/adfns_plscope.htm#g1010526
Ответ 4
Вы можете увидеть, имеет ли объект какие-либо зависимости, запросив таблицу DBA_DEPENDENCIES.
SELECT OWNER,
NAME,
TYPE
FROM SYS.DBA_DEPENDENCIES
WHERE REFERENCED_OWNER = '<your object owner>'
AND REFERENCED_NAME = '<your object name>'
AND REFERENCED_TYPE IN ('PACKAGE', 'PROCEDURE', 'FUNCTION');
Этот запрос возвращает любые зависимости в коде, хранящемся внутри самого экземпляра Oracle.
Он не покажет, вызывается ли какой-либо объект вне экземпляра.
Ответ 5
Вы можете использовать Редакторов, таких как Жаба. Они будут непосредственно перечислять как объекты, на которые зависит ваша процедура, так и объекты, которые ссылаются на вашу процедуру.
Ответ 6
Вы также можете найти пакет инструментов pl/sql ILO, полезный для того, что вы пытаетесь сделать.