Это разновидность Common Table Expressions

Синтаксис описан в доках с FB 2.1

Очень полезная конструкция, которая позволяет построить дерево по
таблице со структурой типа Id, ParentId одним запросом

Также она позволяет дерево склонировать за раз без всяких временных таблиц.

На практике это SELECT, только с более сложным синтаксисом.

Может быть использована в цикле FOR

Я знаю/знал с ними две проблемы:
1) невозможно эффективно ограничить глубину рекурсии
2) иногда неправильно работает (я недавно писал владу об этом)
3) не работала AS CURSOR / WHERE CURRENT OF


Пример синтаксиса для таблицы Tree (Id, ParentId):

WITH RECURSIVE Recursion (
  SELECT Id, ParentId FROM Tree WHERE ParentId IS NULL
  UNION ALL
  SELECT T.Id, T.ParentId FROM Tree T, Recursion R WHERE T.ParentId = R.Id
)

SELECT Id FROM Recursion;

Ответить