日期:2014-05-16  浏览次数:20805 次

求一条查询层次结构的ORCAL 查询语句~~~~~~
测试表创建语句:
CREATE TABLE TEST_QUERY
(
       ID VARCHAR2(10),--ID
       PID VARCHAR2(10),----父文件夹ID
       NAME VARCHAR2(100),----文件夹名称
       IS_FOLDER NUMBER(1)--  1:文件夹,0:文件
)
INSERT INTO TEST_QUERY VALUES('0000','0','A',1);
INSERT INTO TEST_QUERY VALUES('0001','0000','A01',1);
INSERT INTO TEST_QUERY VALUES('0002','0000','A02',1);
INSERT INTO TEST_QUERY VALUES('0003','0000','A03',1);
INSERT INTO TEST_QUERY VALUES('0007','0003','A03-01',0);
INSERT INTO TEST_QUERY VALUES('0008','0003','A03-02',0);
INSERT INTO TEST_QUERY VALUES('0009','0003','A03-03',0);
INSERT INTO TEST_QUERY VALUES('0004','0000','A04',0);
INSERT INTO TEST_QUERY VALUES('0005','0000','A05',0);
INSERT INTO TEST_QUERY VALUES('0006','0000','A06',0);
INSERT INTO TEST_QUERY VALUES('0010','0006','A06-01',0);
INSERT INTO TEST_QUERY VALUES('0011','0006','A06-02',0);
INSERT INTO TEST_QUERY VALUES('0012','0006','A06-03',1);
INSERT INTO TEST_QUERY VALUES('0013','0012','A06-03-01',0);
INSERT INTO TEST_QUERY VALUES('0014','0012','A06-03-02',0);
INSERT INTO TEST_QUERY VALUES('0015','0012','A06-03-03',0);

情景:不知道一个文件夹里面有多少个文件 和多少个文件夹
求查询的语句实现如下功能:
输入一个父ID,然后就把他下面的所有文件和文件夹的层次关系全部查询出来,得到类似于下面的结果
ID,  PID    NAME   IS_FOLDER   LEVEL
0000  0      A      1           1
0001  0000   A01    1           2
0002  0000   A02    1           2
0003  0000   A03    1           2
0007  0003   A03-01 0           3
………………

这个用下面的语句实现出来了:
SELECT TEST_QUERY.*,LEVEL
FROM TEST_QUERY 
where 1=1
START WITH TEST_QUERY.PID = '0' 
CONNECT BY PRIOR TEST_QUERY.ID = TEST_QUERY.PID

但是如果我想要0003下面的文件夹和文件信息,就查不出来了
在where后面加PID条件 或者 START WITH 后面的PID改成0003都不行
请高手帮帮忙,有其他的办法吗

比如给的条件PID是0006,那么想要的结果就是
ID,  PID    NAME   IS_FOLDER   LEVEL
0006  0000   A06       1           1
0010  0006   A06-01    0           2
0011  0006   A06-02    0           2
0012  0006   A06-03    1           2
0013  0012   A03-03-01 0           3
0014  0012   A03-03-02 0           3
0015&nb