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

时间:2016-09-30 13:07:06

标签: stored-procedures plsql toad

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

以防万一,有没有Toad选项可以做到这一点?

3 个答案:

答案 0 :(得分:1)

尝试此查询:

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

答案 1 :(得分:0)

如果您有权从中选择,则所有过程代码都将在sys.all_source表中。这应该让你更近一点:

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

答案 2 :(得分:0)

没有保证的方法,但您可以使用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礼仪可以做到。)