如何判断是否正在使用 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%';
注意:根据需要用 all_/dba_ 切换 user_
如果您专门寻找未调用的函数,那么另一种选择是在打开警告的情况下编译您的代码,然后查找 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#g1010526找到更多相关信息
您可以通过查询 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 实例本身内的代码中的任何依赖关系。
它不会显示是否在实例之外调用了任何对象。
您可以使用像 Toad 这样的编辑器。它们将直接列出您的过程所依赖的对象和引用您的过程的对象。
您可能还会发现 pl/sql 检测包ILO对您正在尝试做的事情很有用。