階層問合せ疑似列は、階層問合せでのみ有効です。階層問合せ疑似列には、次のものがあります。
問合せの中で階層型の関連を定義するには、CONNECT
BY
句を使用する必要があります。
CONNECT_BY_ISCYCLE
疑似列は、現在の行に自身の祖先でもある子がある場合に1を戻します。それ以外の場合は、0(ゼロ)を戻します。
CONNECT
BY
句のNOCYCLE
パラメータを指定した場合のみ、CONNECT_BY_ISCYCLE
を指定できます。NOCYCLE
によって、Oracleは問合せの結果を戻すことができます。このパラメータを指定しないと、データ内のCONNECT
BY
ループのため、問合せは失敗します。
CONNECT_BY_ISLEAF
疑似列は、現在の行がCONNECT
BY
条件によって定義されるツリーのリーフである場合に1を戻します。それ以外の場合は、0(ゼロ)を戻します。この情報は、特定の行をさらに展開して階層の詳細を表示できるかどうかを示します。
CONNECT_BY_ISLEAFの例 次の例は、hr.employees
表の最初の3レベルです。各行がリーフ行か(IsLeaf
列が1)、子である行を持つか(IsLeaf
列が0)を示しています。
SELECT last_name "Employee", CONNECT_BY_ISLEAF "IsLeaf", LEVEL, SYS_CONNECT_BY_PATH(last_name, '/') "Path" FROM employees WHERE LEVEL <= 3 AND department_id = 80 START WITH employee_id = 100 CONNECT BY PRIOR employee_id = manager_id AND LEVEL <= 4 ORDER BY "Employee", "IsLeaf"; Employee IsLeaf LEVEL Path ------------------------- ---------- ---------- ------------------------- Abel 1 3 /King/Zlotkey/Abel Ande 1 3 /King/Errazuriz/Ande Banda 1 3 /King/Errazuriz/Banda Bates 1 3 /King/Cambrault/Bates Bernstein 1 3 /King/Russell/Bernstein Bloom 1 3 /King/Cambrault/Bloom Cambrault 0 2 /King/Cambrault Cambrault 1 3 /King/Russell/Cambrault Doran 1 3 /King/Partners/Doran Errazuriz 0 2 /King/Errazuriz Fox 1 3 /King/Cambrault/Fox . . .
階層問合せによって戻される各行について、LEVEL
疑似列は、ルート行に1を戻し、ルートの子には2を戻します(以降同様に続きます)。ルート行は逆ツリー構造の最上位行です。子である行は任意の非ルート行です。親である行は子を持つ任意の行です。リーフ行は子を持たない任意の行です。図2-1に、逆ツリーのノードとそれらのLEVEL
値を示します。