WITH RECURSIVE dep_tree AS ( SELECT 0 as lvl, rdb$dependent_name, rdb$dependent_type, rdb$depended_on_name FROM rdb$dependencies WHERE rdb$depended_on_name = :depname UNION ALL SELECT (t.lvl + 1) as lvl, d.rdb$dependent_name, d.rdb$dependent_type, d.rdb$depended_on_name FROM rdb$dependencies d JOIN dep_tree t ON t.rdb$dependent_name = d.rdb$depended_on_name AND t.lvl < 5 ) SELECT DISTINCT rdb$dependent_name, rdb$dependent_type, rdb$depended_on_name FROM dep_tree
Глубину прекращения поиска мы задаем вручную (в примере -- это константа 5). Если задать слишком много, то запрос будет выполняться слишком долго. Задать мало -- и мы рискуем потерять объекты при большой глубине вложенности связей.
Комментариев нет:
Отправить комментарий