LEVEL は、SELECT 文で列を使用できる場所であればどこでも使用できる疑似列です。 結果セットの各行について、LEVEL は、この行で表されるノードの階層の深さを指定するゼロ以外の整数値を返します。 ルートノードの LEVEL 値は 1 です。 ルートノードの直接の子ノードの LEVEL 値は 2 です。 他のノードの LEVEL 値も同様の方法で計算されます。
次のクエリは、前のクエリに基づいて変更されています。 LEVEL 疑似列が次のクエリに追加されます。 LEVEL 値に基づいて、各行の階層の深さを強調するために従業員名がインデントされます。
SELECT LEVEL, LPAD (' ', 2 * (LEVEL - 1)) || ename "employee", empno, mgr
FROM emp START WITH mgr IS NULL
CONNECT BY PRIOR empno = mgr;
次の例は、このクエリの出力を示しています。
level | employee | empno | mgr
-------+-------------+-------+------
1 | KING | 7839 |
2 | JONES | 7566 | 7839
3 | SCOTT | 7788 | 7566
4 | ADAMS | 7876 | 7788
3 | FORD | 7902 | 7566
4 | SMITH | 7369 | 7902
2 | BLAKE | 7698 | 7839
3 | ALLEN | 7499 | 7698
3 | WARD | 7521 | 7698
3 | MARTIN | 7654 | 7698
3 | TURNER | 7844 | 7698
3 | JAMES | 7900 | 7698
2 | CLARK | 7782 | 7839
3 | MILLER | 7934 | 7782
(14 rows)
共通の親を共有し、同じレベルにあるノードは、兄弟と呼ばれます。 たとえば、前述の出力では、ALLEN、WARD、MARTIN、TURNER、JAMES を含む従業員は、親である BLAKE のレベル 3 にあるため兄弟です。 JONES、BLAKE、および CLARK は、レベル 2 にあり、KING が共通の親であるため兄弟です。