Печать
Категория: Вопросы и ответы Oracle
Просмотров: 8118

Псевдостолбец CONNECT_BY_ISLEAF в ранних версиях Oracle можно заменить следующим выражением:

DECODE(LEVEL + 1, LEAD(LEVEL)OVER (ORDER BY ROWNUM), 0, 1){/code}

Пример:

SQL>           SELECT LPAD(' ', (level-1)*2, ' ')  || last_name "Employee", 
  2>                  DECODE(LEVEL + 1, LEAD(LEVEL) OVER (ORDER BY ROWNUM), 0, 1) "IsLeaf",
  3>                  LEVEL
  4>             FROM hr.employees
  5>            WHERE LEVEL <= 3 AND department_id = 80
  6>       START WITH employee_id = 100
  7> CONNECT BY PRIOR employee_id = manager_id AND LEVEL <= 4;
 
Employee       IsLeaf LEVEL
-------------- ------ -----
  Russell      0      2    
    Tucker     1      3    
    Bernstein  1      3    
    Hall       1      3    
    Olsen      1      3    
    Cambrault  1      3    
    Tuvault    1      3    
  Partners     0      2    
    King       1      3    
    Sully      1      3    
    McEwen     1      3    
    Smith      1      3    
    Doran      1      3    
    Sewall     1      3