如何判断是否正在使用PL / SQL包,过程或函数?

时间:2011-01-12 14:55:42

标签: oracle plsql statistics dead-code

如何判断是否正在使用PL / SQL包,过程或函数?是否有包含有关PL / SQL包,过程或函数用法的统计信息的Oracle表或视图?

6 个答案:

答案 0 :(得分:15)

您也可以尝试查询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%';

注意:根据需要用all_ / dba_切换user_

如果您专门寻找未调用的函数,那么另一个选项是在打开WARNINGS的情况下编译您的代码,然后查找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

答案 1 :(得分:5)

默认不是。但您可以使用Oracle数据库的审核功能。在Ask Tom是一个关于审计过程调用的长线程!

答案 2 :(得分: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

找到更多相关信息

答案 3 :(得分:1)

您可以通过查询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实例本身内的代码中的所有依赖项。

它不会显示是否在实例外调用任何对象。

答案 4 :(得分:1)

您可以使用像Toad这样的编辑器。它们将直接列出您的过程所依赖的对象和引用您的过程的对象。

答案 5 :(得分:0)

您可能还会发现pl / sql检测包ILO对您要执行的操作很有用。