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

Другие вопросы по тегам