Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So finden Sie den Namen der gespeicherten Prozedur mithilfe des Spaltennamens in Oracle 11g

Es gibt keinen garantierten Weg, aber Sie können user/all/dba_source mit regexp_like durchsuchen um nach ganzen Wörtern zu suchen und mit user/all/dba_dependencies zu vergleichen, um die Liste der zu prüfenden Pakete einzugrenzen.

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' );

oder ob es Verweise darauf von anderen Schemas geben könnte,

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' );

Sie können es einfach mit select distinct s.owner, s.name, s.type ... machen um eine Liste der zu untersuchenden Objekte zu erhalten.