Проход дерева

В случае таблицы EMPLOYEES начальной точкой является сотрудник с фамилией Kochhar.

13-6-1791367

  • Определяет условие, которое должно быть выполнено

  • Принимает все допустимые условия

13-6-2-4554295 13-6-3-5464565

Строка или строки, используемые в качестве корня дерева, определяются с помощью предложения START WITH. Предложение START WITH может содержать любое допустимое условие.

Примеры

Работая с таблицей EMPLOYEES, можно начать с сотрудника King, являющегося президентом компании.

     ... START WITH manager_id IS NULL

Либо можно начать с сотрудника Kochhar. Условие START WITH может содержать подзапрос.

     ... START WITH employee_id = (SELECT employee_id     FROM employees

    WHERE last_name = 'Kochhar')

Если предложение START WITH опущено, проход дерева начинается со всех строк таблицы как с корневых.

Примечание. Предложения CONNECT BY и START WITH не входят в стандарт ANSI SQL.

13-7-5201628

Направление запроса, т.е. выполняется ли он от родительского объекта к дочернему или наоборот, определяется размещением столбца CONNECT BY PRIOR. Оператор PRIOR ссылается на родительскую строку. Чтобы найти дочерние строки для родительской строки, сервер Oracle выполняет оценку выражения PRIOR для родительской строки и других выражений для каждой строки в таблице.

Строки, для которых условие является истинным, являются дочерними строками для данной родительской строки. Сервер Oracle всегда выбирает дочерние строки, оценивая условие CONNECT BY для текущей родительской строки.

Примеры

Проход сверху вниз для таблицы EMPLOYEES. Определите иерархическое отношение, в котором значение EMPLOYEE_ID родительской строки равно значению MANAGER_ID дочерней строки:

    

... CONNECT BY PRIOR employee_id = manager_id

Проход снизу вверх для таблицы EMPLOYEES:

    

... CONNECT BY PRIOR manager_id = employee_id

Оператор PRIOR необязательно вставлять в код сразу же после предложения CONNECT BY.

Следовательно, приведенное ниже предложение CONNECT BY PRIOR дает те же результаты, что и предложение из предыдущего примера:

     ... CONNECT BY employee_id = PRIOR manager_id

Примечание. Предложение CONNECT BY не может содержать вложенный подзапрос.

Далее: Выгрузка содержимого таблицы в файл

Related Posts