Как определить, используется ли пакет, процедура или функция PL / SQL? - PullRequest
17 голосов
/ 12 января 2011

Как узнать, используется ли пакет, процедура или функция PL / SQL?Существует ли таблица или представление Oracle, содержащие статистику использования пакета, процедуры или функции PL / SQL?

Ответы [ 6 ]

15 голосов
/ 18 июня 2012

Вы также можете попробовать запросить 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
5 голосов
/ 12 января 2011

Не по умолчанию. Но вы можете использовать функциональность audit вашей базы данных Oracle. На Ask Tom длинная ветка об аудите вызовов процедур!

3 голосов
/ 11 февраля 2011

Если вы используете 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

1 голос
/ 11 марта 2014

Вы можете использовать редакторы, такие как жаба. Они будут непосредственно перечислять как объекты, от которых зависит ваша процедура, так и объекты, которые ссылаются на вашу процедуру.

1 голос
/ 10 февраля 2011

Вы можете увидеть, есть ли у объекта какие-либо зависимости, запросив таблицу 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.

Он не покажет, вызывается ли какой-либо объект за пределами экземпляра.

0 голосов
/ 11 февраля 2011

Вы также можете найти пакет инструментов pl / sql ILO полезным для того, что вы пытаетесь сделать.

...