如何查找PL SQL包中受影响的表?

use*_*578 0 sql oracle plsql stored-procedures

我必须找出现有的PL SQL包中要插入或更新到其中的表的列表。我开始分析该软件包。令人担忧的是,程序包代码在数千行代码中运行,并依次调用许多其他程序包。另外,代码不是我写的。由于它是开发环境,因此无法运行AWR报告。

启动事务后,是否有办法将插入/更新的表插入其中?是否可以编写触发器来满足我的要求?

akk*_*d87 5

-- plain
select *
from dba_dependencies
where name = 'PACKAGE_NAME' and owner = 'PACKAGE_OWNER'
and type in ('PACKAGE', 'PACKAGE BODY') and referenced_type = 'TABLE';

-- hierarchy
select distinct referenced_owner, referenced_name, referenced_type, referenced_link_name
from dba_dependencies
where referenced_type = 'TABLE'
start with name = 'PACKAGE_NAME' and owner = 'PACKAGE_OWNER' 
and type in ('PACKAGE', 'PACKAGE BODY')
connect by nocycle prior referenced_name = name and prior referenced_owner = owner
and replace(prior referenced_type, 'PACKAGE BODY', 'PACKAGE') = replace(type, 'PACKAGE BODY', 'PACKAGE')
and referenced_owner not in ('SYS', 'SYSTEM', 'OUTLN' , 'AUDSYS')
order by 1, 2, 3;
Run Code Online (Sandbox Code Playgroud)

  • 请记住,如果PL / SQL使用动态SQL(嵌入在字符串变量中的SQL并在执行时运行),则这些字符串SQL变量中的表将不会显示为依赖项,因为编译器永远不会看到它们。 (3认同)