Как вывести список всех таблиц, используемых в хранимой процедуре?

Как вывести список всех таблиц, используемых в хранимой процедуре, в том числе и во вложенных в нее процедурах?


Ответы (1 шт):

Автор решения: 0xdb

Постройте дерево зависимостей начиная от пакета или процедуры.

Например, есть такая структура:

create table t1 (val int)
/
create table t2 (val int)
/
create view v2 as select * from t2
/
create or replace package pack as
    procedure exec;
end;
/
create or replace package body pack as
    procedure proc is
    begin
        for r in (select 1 from v2) loop null; end loop; 
    end;
    procedure exec is
    begin
        for r in (select 1 from t1) loop null; end loop;
        proc;
    end;
end;
/

Следующий запрос выведет ожидаемые две таблицы:

select a.referenced_owner||'.'||a.referenced_name referenced, 
    a.referenced_type type, a.referenced_link_name dblink 
from all_dependencies a
where a.referenced_type = 'TABLE'
start with a.owner = user and a.name = upper ('pack')
connect by 
        a.owner = prior a.referenced_owner
    and a.name  = prior a.referenced_name
    and a.type  = prior a.referenced_type;

REFERENCED       TYPE                DBLINK  
---------------- ------------------- --------
SH.T1            TABLE                       
SH.T2            TABLE                       

Ссылка на документацию по представлению ALL_DEPENDENCIES.

→ Ссылка