Как вы можете определить, используется ли 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, полезный для того, что вы пытаетесь сделать.