Как определить, используется ли пакет, процедура или функция PL/SQL?
Как определить, используется ли пакет, процедура или функция PL/SQL? Существует ли таблица или представление Oracle, содержащее статистику использования пакета, процедуры или функции PL/SQL?
6 ответов
Вы также можете попробовать запросить 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%')
Вам придется игнорировать ссылки на себя, но это должно быть легко обнаружить.
Вам также необходимо проверить "просмотр" источника из user/all_views. Смотрите другой вопрос о запросе источника.
Вы также можете проверить, используется ли пакет или функция / процедура верхнего уровня с
select * from all_dependencies
where referenced_name like '%PACKAGE_NAME%';
NB: при необходимости переключите user_ с 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
Не по умолчанию. Но вы можете использовать функции аудита вашей базы данных Oracle. В Ask Tom есть длинная тема об аудите вызовов процедур!
Если вы на 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
Вы можете увидеть, есть ли у объекта какие-либо зависимости, запросив таблицу 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.
Это не покажет, вызывается ли какой-либо объект за пределами экземпляра.
Вы можете использовать редакторы, такие как жаба. Они будут непосредственно перечислять как объекты, от которых зависит ваша процедура, так и объекты, которые ссылаются на вашу процедуру.
Вы также можете найти инструментарий pl/sql ILO полезным для того, что вы пытаетесь сделать.