有没有办法以编程方式从Oracle包中提取表引用?

Joh*_*n O -1 oracle plsql package

一年几次,我的团队会出于某种原因编写一个新的Oracle软件包,而且很多时候这个软件包只引用了这些软件包(我们的软件包运行的用户/角色)已经有资格的表.

偶尔,情况并非如此.签入包,无法编译,我们得到一个含有表名附近行号的神秘错误消息.

麻烦的是,在这一点上,我们将等待几个小时(政治)批准过程发布,给予补助,我们检查包...并且它失败并带有新的表名.

有没有办法以编程方式获取所有引用的列表?如果是这样,我们可以将其自动化以检查dba_tab_privs以查看是否需要预先授予补助,或者甚至生成授权脚本以使实际发放这些授权的团队更容易(特别是几个月之后,当它部署到生产时)我们再一次经历了整个对不起的烂摊子.

Jus*_*ave 5

假设所有引用都是静态的(即代码中没有随机动态SQL的位),可以查询`dba_dependencies'

select referenced_owner, referenced_name
  from dba_dependencies
 where owner = <<owner of package>>
   and name  = <<name of package>>
   and type  = 'PACKAGE BODY'
   and referenced_type = 'TABLE'
Run Code Online (Sandbox Code Playgroud)

您可以查找非表引用以及与包规范相关的依赖项以及包体(如果您愿意).这将只显示包体依赖于表的情况.