如何找到所有使用 PL SQL 中的列的存储过程?

How can I find all stored procedures that are using a column in PL SQL?

我需要一个查询来查找我的 PLSQL 数据库中使用列 "ID_SUB" 的所有存储过程。

以防万一,是否有任何 Toad 选项可以执行此操作?

试试这个查询:

 select name, 
        line, 
        text 
   from ALL_SOURCE 
  where text like '%ID_SUB%'

所有程序代码都将在 sys.all_source table 中,如果您有 select 的权限。这应该让你更接近一点:

select distinct owner, name
from sys.all_source
where type = 'PROCEDURE'
and text like '%ID_SUB%';

没有保证的方法,但您可以使用 regexp_like 搜索 user/all/dba_source 以检查整个单词,并使用 user/all/dba_dependencies 交叉引用以缩小包列表检查。

select s.name, s.type, s.line, s.text
from   user_source s
where  ltrim(s.text,chr(9)||' ') not like '--%'
and    regexp_like(lower(s.text),'\Wyour_column_name_here\W')
and    (s.name, s.type) in
       ( select d.name, d.type
         from   user_dependencies d
         where  d.referenced_owner = user
         and    d.referenced_name = 'YOUR_TABLE_NAME_HERE' );

或者如果可以从其他模式引用它,

select s.owner, s.name, s.type, s.line, s.text
from   all_source s
where  ltrim(s.text,chr(9)||' ') not like '--%'
and    regexp_like(lower(s.text),'\Wyour_column_name_here\W')
and    (s.owner, s.name, s.type) in
       ( select d.owner, d.name, d.type
         from   all_dependencies d
         where  d.referenced_owner = user
         and    d.referenced_name = 'YOUR_TABLE_NAME_HERE' );

您可以让它只使用 select distinct s.owner, s.name, s.type ... 来获取要调查的对象列表。

(重复我对 How to find name of the stored procedure using Column name in Oracle 11g 的回答,我在发帖后才意识到这是 5 年前的事了。希望这对 SO 礼仪没问题。)