階層問い合わせがわかりにくくなるのは、どっちが、どっちかわからなくなるからだと思います。
少なくとも自分はそうです。。。
で、あえて逆をたどります。
サンプルデータは前回と同じ、ですがちょっと追加。
create table test (id number, next number);
insert into test values ( NULL , 1 );
insert into test values ( 1 , 2 );
insert into test values ( 1 , 3 );
insert into test values ( 1 , 4 );
insert into test values ( 4 , NULL );
insert into test values ( 2 , 5 );
insert into test values ( 5 , NULL );
insert into test values ( 2 , 6 );
insert into test values ( 6 , NULL );
insert into test values ( 3 , 5 );
insert into test values ( 3 , 7 );
insert into test values ( 7 , 8 );
insert into test values ( 8 , NULL );
commit;
id=NULL を足しています。
で逆バージョン基本形
select next,id,Level
from test
start with id = 8
connect by prior id = next;
単純に、next と id を入れ替えただけ。select句も入れ替えています。
prior id = next は、「親のid は子のnext」
結果をみると、子から親をたどっているように見えます。
NEXT ID LEVEL ---------- ---------- ---------- 8 1 8 7 2 7 3 3 3 1 4 1 5
逆バージョンでパスを表示すると。。。
select next,id,Level,sys_connect_by_path(to_char(id),'/') as Path from test start with id = 8 connect by prior id = next; NEXT ID LEVEL PATH ---------- ---------- ---------- -------------------- 8 1 /8 8 7 2 /8/7 7 3 3 /8/7/3 3 1 4 /8/7/3/1 1 5 /8/7/3/1/
こんな感じ。
一応、DBA_DEPENCENCIES の階層問い合わせも(取り扱い注意!)
set verify off define downer = &1 define dname = &2 select upper('&downer') || '.' || upper('&dname') || sys_connect_by_path(owner||'.'||name,'<-') DEPENDENCY from DBA_dependencies where connect_by_IsLeaf = 1 start with referenced_owner = upper('&downer') and referenced_name = upper('&dname') connect by prior owner = referenced_owner and prior name = referenced_name /