आप कुछ इस तरह चाहते हैं:
select t.table_name, level,lpad(' ', 2 * (level - 1))||t.table_name
from user_tables t
join user_constraints c1
on (t.table_name = c1.table_name
and c1.constraint_type in ('U', 'P'))
left join user_constraints c2
on (t.table_name = c2.table_name
and c2.constraint_type='R')
start with t.table_name = 'ROOT_TAB'
connect by prior c1.constraint_name = c2.r_constraint_name
मूल क्वेरी के साथ समस्या यह है कि चाइल्ड टेबल के लिए uc.constraint_name विदेशी कुंजी का नाम है। पहले बच्चे को रूट टेबल से जोड़ने के लिए यह ठीक है, लेकिन यह वह नहीं है जो आपको दूसरे स्तर के बच्चों को पहले से जोड़ने की जरूरत है। यही कारण है कि आपको दो बार बाधाओं के खिलाफ शामिल होने की आवश्यकता है - एक बार तालिका की प्राथमिक कुंजी प्राप्त करने के लिए, एक बार विदेशी कुंजी प्राप्त करने के लिए।
एक तरफ के रूप में, यदि आप user_* विचारों के बजाय all_* विचारों को क्वेरी करने जा रहे हैं, तो आप आम तौर पर उन्हें table_name और स्वामी पर शामिल करना चाहते हैं, न कि केवल table_name। यदि एक से अधिक स्कीमा में समान नाम वाली तालिकाएँ हैं, तो केवल table_name में शामिल होने से गलत परिणाम प्राप्त होंगे।