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>