如何判断一个PL/SQL包、过程或函数是否被使用?是否有Oracle表或视图可以包含有关PL/SQL包、过程或函数使用情况的统计数据?
如何判断一个PL/SQL包、过程或函数是否被使用?是否有Oracle表或视图可以包含有关PL/SQL包、过程或函数使用情况的统计数据?
您还可以尝试查询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%')
您需要忽略自引用,但这应该很容易发现。
您还需要从用户/所有视图中检查“查看”源代码。有关查询视图源的其他问题,请参见其他问题。
您也可以使用此方法检查包或顶级函数/过程是否已使用
select * from all_dependencies
where referenced_name like '%PACKAGE_NAME%';
注意: 根据需要将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上有一个关于过程调用审计的长线程!
PL/Scope
工具。该工具可以在程序单元编译时收集有关PL/SQL源代码中标识符的数据,并在静态数据字典视图中提供这些数据。收集的数据包括标识符类型、用法(声明、定义、引用、调用、赋值)以及每个用法在源代码中的位置。
PL/Scope能够开发强大而有效的PL/Scope源代码浏览器,通过最小化浏览和理解源代码所花费的时间,提高了PL/SQL开发人员的生产力。
你可以在此处找到更多相关信息。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实例中的代码中的任何依赖项。
它不会揭示任何对象是否在实例外被调用。
您可以使用像Toad这样的编辑器。它们将直接列出您的过程所依赖的对象以及引用您的过程的对象。