我有一个任务来列出所有者的程序包名称,在某些情况下,同一表名被使用两次以上或5次。
我想出了以下查询,但是dba_dependencies没有给出我想要的结果。
select type,REFERENCED_NAME from dba_dependencies where REFERENCED_NAME in
(select
REFERENCED_NAME
from
dba_dependencies
where
owner = 'SITTEST' and REFERENCED_TYPE='TABLE'
and type='PACKAGE'
group by REFERENCED_NAME having count(*)>5);
我尝试使用all_source和dba_source但没有骰子。
奇怪的要求!由于DBA_DEPENDENCIES每个依赖项仅包含一行,因此您将必须搜索软件包的源代码。
这样的事情应该可以做到(为简单起见,我使用了USER%视图):
select t.table_name, p.object_name, count(*)
from user_tables t
cross join user_objects p
join user_source s on s.name = p.object_name
and s.type = 'PACKAGE BODY'
and upper(s.text) like '%' || upper(t.table_name) || '%'
where p.object_type = 'PACKAGE BODY'
group by t.table_name, p.object_name
having count(*) > 5;
但是-这将算作误报,因为它只是在寻找文本,可能并不是真正的用法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句