тик, замечательно
(select distinct
ref_constraint, ref_table, ref_col,
constraint_name, table_name, col
from(
select cr.constraint_name ref_constraint, col.table_name ref_table, col.column_name ref_col,
c.constraint_name, c.table_name, colr.column_name col
from all_constraints c,
all_constraints cr,
all_cons_columns col,
all_cons_columns colr
where c.constraint_type = 'R'
and( c.r_constraint_name = cr.constraint_name and c.r_owner = cr.owner
and c.r_constraint_name = col.constraint_name and c.r_owner = col.owner
and c.constraint_name = colr.constraint_name and c.owner = colr.owner)
)
start with table_name = 'MYTABLE'
CONNECT BY NOCYCLE PRIOR table_name=ref_table)
Уже совсем близко к истине, но еще хотелось бы вывести информацию именно в виде дерева,
то есть каким-то образом заюзать LEVEL, но так как есть циклы
NOCYCLE насколько я понял спасает от самой ошибки зацикливания, но он сильно дублирует данные, то есть допустим таблица ссылается сама на себя с NOCYCLE она выведет эту ссылку один раз, но за ней потянет еще раз все ссылки на которые та ссылается в итоге цикл все равно есть, но он прерывается после первой итерации однако это добавляет море лишних записей - отсек их по DISTINCT-у, но вот как построить именно в виде дерева - LEVEL по дистинкту то не прокатит :( ?
Типа MyTable
- MyTable7
- MyTable3
- MyTable5
- MyTable
......