您如何找到使用存储过程的位置(在其他存储过程中)

Pet*_*all 10 oracle stored-procedures

我有一个要重构的存储过程,它位于一个拥有数千个 SP 的数据库中。是否有一种快速的方法可以在其他 SP 中查找对该存储过程的引用,以便我可以确保在重构​​时不会破坏任何其他代码。

在应用程序代码中,我可以很容易地查找对 SP 的调用,并且可以对定义 SP 的所有各种 sql 文件进行文本搜索,但数据库中可能有一些 SP 可能会以这种方式被遗漏.

编辑:我试图定位的存储过程是包的一部分。

编辑:我在 Oracle 11g 上运行

Min*_*uba 12

DBA_DEPENDENCIES view 有这些问题的所有答案。

select * from DBA_DEPENDENCIES
  where referenced_owner='HR' and referenced_name='STORED_PROCEDURE_41';
Run Code Online (Sandbox Code Playgroud)

  • 但是,如果您使用动态 sql,这种方法将不起作用。即,如果您将过程作为动态 sql 的一部分执行。否则 dba_ 或 all_dependencies 会很好用。 (2认同)

Pet*_*all 6

这似乎有效 - 它不如@MindaugasRiauba 的答案优雅,但它似乎确实从所有包中找到了引用。

SELECT * FROM all_source
where UPPER(TEXT) like UPPER('%STORED_PROCEDURE_NAME%')
Run Code Online (Sandbox Code Playgroud)

(来自如何判断是否正在使用 PL/SQL 包、过程或函数?