Как вывести список всех таблиц, используемых в хранимой процедуре?
Как вывести список всех таблиц, используемых в хранимой процедуре, в том числе и во вложенных в нее процедурах?
Ответы (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.