对于树形查询中的PRIOR操作,一般都是用在CONNECT BY语句中,而这个PRIOR操作其实在SELECT的字段列表中也是可以使用的。



看一个简单的例子:

SQL> create table t (id number, parent_id number, name varchar2(30));


Table created.


SQL> insert into t values (1, null, 'a');


1 row created.


SQL> insert into t values (2, 1, 'b');


1 row created.


SQL> insert into t values (3, 1, 'c');


1 row created.


SQL> insert into t values (4, 2, 'd');


1 row created.


SQL> commit;


Commit complete.


SQL> select * from t;


       ID  PARENT_ID NAME


---------- ---------- ---------------


        1            a


        2          1 b


        3         1 c


        4          2 d


SQL> select id, parent_id, name


 2  from t


 3  start with id = 1


 4  connect by prior id = parent_id;


       ID  PARENT_ID NAME


---------- ---------- ---------------


        1            a


        2          1 b


        4          2 d


        3         1 c


这是树形查询中最长使用PRIOR操作的情况,在CONNECT BY语句中使用。

不过PRIOR还可以用在SELECT列表中:

SQL> select id, parent_id, prior id p_id, name, prior name p_name


 2  from t


 3  start with id = 1


 4  connect by prior id = parent_id;


       ID  PARENT_ID       P_ID NAME            P_NAME


---------- ---------- ---------- --------------- ---------------


        1                       a


        2          1          1 b               a


        4          2          2 d               b


        3          1         1 c               a


除了普通的列,PRIOR甚至还可以用于SYS_CONNECT_BY_PATH函数:

SQL> select


 2  id,


 3  parent_id,


 4  prior id p_id,


 5  sys_connect_by_path(name, '/') name,


 6  prior sys_connect_by_path(name, '/') p_name


 7  from t


 8  start with id = 1


 9  connect by prior id = parent_id;


       ID  PARENT_ID       P_ID NAME            P_NAME


---------- ---------- ---------- --------------- ---------------


        1                       /a


        2          1          1 /a/b            /a


        4          2          2 /a/b/d          /a/b


        3          1          1 /a/c            /a


利用这个功能,可以使得树形查询实现很多更灵活的功能。


oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html