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

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

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

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

Строка или строки, используемые в качестве корня дерева, определяются с помощью предложения 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.

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

Направление запроса, т.е. выполняется ли он от родительского объекта к дочернему или наоборот, определяется размещением столбца 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 не может содержать вложенный подзапрос.

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

Статьи по теме
Комментарии
Написать

(обязательно)

(обязательно)

Это не спам (обязательно)