--drop table dba_dependX;
create table dba_dependX
(
   owner             varchar2(50), --父结点owner
   type              varchar2(50), --父结点类型
   name              varchar2(50), --父结点名称                
   referenced_owner  varchar2(50), --子结点owner
   referenced_type  varchar2(50), --子结点类型
   referenced_name   varchar2(50)  --子结点名称
);
insert into dba_dependX values('TEST', 'PACKAGE',      'SPK_A',  'TEST', 'TABLE'  , 'T_A1'    );
insert into dba_dependX values('TEST', 'PACKAGE',      'SPK_A',  'TEST', 'TABLE'  , 'T_A2'    );
insert into dba_dependX values('TEST', 'PACKAGE',      'SPK_A',  'SYS ', 'PACKAGE', 'STANDARD');
insert into dba_dependX values('TEST', 'PACKAGE BODY', 'SPK_A',  'TEST', 'PACKAGE', 'SPK_A'  );
insert into dba_dependX values('TEST', 'PACKAGE BODY', 'SPK_A',  'TEST', 'PACKAGE', 'SPK_B'  );
insert into dba_dependX values('TEST', 'PACKAGE BODY', 'SPK_A',  'SYS',  'PACKAGE', 'STANDARD');insert into dba_dependX values('TEST', 'PACKAGE',   'SPK_B',  'SYS',  'PACKAGE', 'STANDARD');
insert into dba_dependX values('TEST', 'PACKAGE BODY', 'SPK_B',  'TEST', 'PACKAGE', 'SPK_B '  );
insert into dba_dependX values('TEST', 'PACKAGE BODY', 'SPK_B',  'TEST', 'TABLE'  , 'T_B2'    );
insert into dba_dependX values('TEST', 'PACKAGE BODY', 'SPK_B',  'SYS',  'PACKAGE', 'STANDARD');
insert into dba_dependX values('TEST', 'PACKAGE BODY', 'SPK_B',  'TEST', 'TABLE'  , 'T_B1'    );
commit;树状关系如下:
SPK_A(PACKAGE BODY)......SPK_A(PACKAGE)......T_A1(TABLE)
                                    ......T_A2(TABLE)
                                    ......STANDARD(PACKAGE)                                                     
                   ......SPK_B(PACKAGE)
                   ......STANDARD(PACKAGE)
SPK_B(PACKAGE BODY)......SPK_B(PACKAGE)......STANDARD(PACKAGE)
                   ......STANDARD(PACKAGE)
                   ......T_B1(TABLE)
                   ......T_B2(TABLE)
                                           
                   问题1: 使用什么SQL语句才能查出上面的结果?
我使用树状查询,但结果有所差异,
select 'TEST' || ' ' || 'SPK_A' || ' ' || 'PACKAGE BODY' from dual
union all
select lpad(' ',5) || lpad(' ',3*(level-1)) || referenced_owner || ' ' || referenced_name || ' ' || referenced_type
from dba_dependX dd
start with dd.name='SPK_A' and dd.type='PACKAGE BODY'
connect by prior referenced_name=name and referenced_type=type
union all
select 'TEST' || ' ' || 'SPK_A' || ' ' || 'PACKAGE' from dual
union all
select lpad(' ',5) || lpad(' ',3*(level-1)) || referenced_owner || ' ' || referenced_name || ' ' || referenced_type
from dba_dependX dd
start with dd.name='SPK_A' and dd.type='PACKAGE'
connect by prior referenced_name=name and referenced_type=type上面查询的树形结构如下:
SPK_A(PACKAGE BODY)......SPK_A(PACKAGE)                                                  
                   ......SPK_B(PACKAGE)
                   ......STANDARD(PACKAGE)
SPK_A(PACKAGE)......T_A1(TABLE)
              ......T_A2(TABLE)
              ......STANDARD(PACKAGE)
      
问题2: 我不能把SPK_A(PACKAGE)下面的结点挂到SPK_A(PACKAGE BODY)也跟SPK_A(PACKAGE)一样一起挂靠到SPK_A(PACKAGE)下,变成:
SPK_A(PACKAGE BODY)......SPK_A(PACKAGE)......T_A1(TABLE)
                                    ......T_A2(TABLE)
                                    ......STANDARD(PACKAGE)                                                     
                   ......SPK_B(PACKAGE)
                   ......STANDARD(PACKAGE)
希望大虾帮帮忙, 帮忙写出SQL语句, 或是其它建议(比如更改表结构)都非常感谢!!!