No. 20280

(V9I) Oracle 9i의 Hierarchical query의 ORDER SIBLINGS BY CLAUSE 
===============================================================

PURPOSE
-------

   이 문서는 Oracle 9i의 new feature인 ORDER SIBLINGS BY 절을 
   Hierarchical query에 사용하는 예를 통하여 특정 컬럼을 기준으로 
   Ordering된 형태로 display하는 방법을 보여준다.  


Explanation & Example
---------------------

   Hierarchical query를 구현할 때 ORDER BY 절을 사용하는 것은 
   Oracle 7.1 버젼부터 가능한 것이었다. 
   그러나, 순서대로 ordering되지 않고 특정 컬럼(emp table의 ename)을 
   기준으로 ordering하기를 원한다면 <Bulletin:10373>처럼 procedure를 
   작성하여야만 하였다. 
   그러나, Oracle 9i 에서는 ORDER BY 절 대신에 ORDER SIBLINGS BY 절을 
   사용할 수 있어 user-defined stored procedure를 만들 필요가 없게 되었다.  

1) Ordering 하기 전의 emp table의 Hierarchical query

SQL> @a


ename                      EMPNO    MGR JOB
------------------------- ------ ------ ---------------
     KING                   7839        PRESIDENT
          JONES             7566   7839 MANAGER
               SCOTT        7788   7566 ANALYST
                    ADAMS   7876   7788 CLERK
               FORD         7902   7566 ANALYST
                    SMITH   7369   7902 CLERK
          BLAKE             7698   7839 MANAGER
               ALLEN        7499   7698 SALESMAN
               WARD         7521   7698 SALESMAN
               MARTIN       7654   7698 SALESMAN
               TURNER       7844   7698 SALESMAN


ename                      EMPNO    MGR JOB
------------------------- ------ ------ ---------------
               JAMES        7900   7698 CLERK
          CLARK             7782   7839 MANAGER
               MILLER       7934   7782 CLERK

14 rows selected.


Ordering 하기 전의 a.sql 은 다음과 같다. 

   col ename format a25
   col empno format 99999
   col mgr format 99999
   col job format a15
   select rpad(' ', LEVEL*5) || ename "ename", empno, mgr, job
   from emp
   start with job='PRESIDENT'
   connect by prior empno=mgr;

   /


2) 9i의 new feature인 Hierarchical query를 사용하여 Ordering한 경우 

SQL> @new_a

ename                      EMPNO    MGR JOB
------------------------- ------ ------ ---------------
     KING                   7839        PRESIDENT
          BLAKE             7698   7839 MANAGER
               ALLEN        7499   7698 SALESMAN
               JAMES        7900   7698 CLERK
               MARTIN       7654   7698 SALESMAN
               TURNER       7844   7698 SALESMAN
               WARD         7521   7698 SALESMAN
          CLARK             7782   7839 MANAGER
               MILLER       7934   7782 CLERK
          JONES             7566   7839 MANAGER
               FORD         7902   7566 ANALYST


ename                      EMPNO    MGR JOB
------------------------- ------ ------ ---------------
                    SMITH   7369   7902 CLERK
               SCOTT        7788   7566 ANALYST
                    ADAMS   7876   7788 CLERK

14 rows selected.


Ordering하기 위해 사용한 new_a.sql 은 다음과 같다. 

   col ename format a25
   col empno format 99999
   col mgr format 99999
   col job format a15
   select rpad(' ', LEVEL*5) || ename "ename", empno, mgr, job
   from emp
   start with job='PRESIDENT'
   connect by prior empno=mgr
   order siblings by ename;
   /


Reference Documents
-------------------
<Bulletin:10373>