如何找到所有使用 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 礼仪没问题。)
我需要一个查询来查找我的 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 礼仪没问题。)