2015-08-12 3 views
1

Что такое терминатор рекурсивного запроса?
По:Терминатор рекурсивных запросов

Семантика рекурсивного исполнения заключается в следующем:
Разделить выражение CTE в якорь и рекурсивных членов.
Запустите якорный элемент (ы), создающий первый набор результатов или базовый результат (T0).
Запустите рекурсивный элемент (ы) с Ti в качестве входа и Ti + 1 в качестве выхода.
Повторите шаг 3 до тех пор, пока не будет возвращен пустой набор.
Вернуть набор результатов. Это UNION ALL от T0 до Tn.

Это правильно?

Если терминатор должен быть: «Нет новый запись возвращается»?

+0

Звучит правильно для меня. Рекурсия останавливается, если нет строки, возвращенной, в этом случае нет ввода для следующего уровня. И вы можете возвращать одну и ту же строку несколько раз (но это, вероятно, приведет к бесконечной рекурсии). – dnoeth

ответ

1

Это немного для комментария.

Рекурсивные CTE не являются действительно «рекурсивными» способами использования термина на других языках программирования. Когда я думаю о рекурсивных функциях, я думаю о сохранении локальных переменных и создании нового кадра для следующего вызова функции и т. Д. И т. Д.

Вместо этого «рекурсивные» КТЭ действительно индуктивны. Они начинаются с «0» - привязки - и повторно применяют рекурсивный элемент к новым строкам результирующего набора, созданного на каждой итерации. Поскольку индуктивный шаг применяется к новым строкам, он останавливается, когда нет новых строк.

Итак, ваша интерпретация, что рекурсия прекращается, когда возвращается пустой набор, является подходящим описанием того, что происходит. Однако рекурсивный шаг применяется только к новым строкам.

+0

Большое спасибо. Это очень помогает. Термин «рекурсивный» действительно смутил меня. – jokeman

Смежные вопросы