четверг, 7 июля 2016 г.

И люди так программируют...


WITH RECURSIVE PEDIGREE (
 CODE_HORSE,
 CODE_FATHER,
 CODE_MOTHER,
 NAME,
 MARK,
 DEPTH)
AS (SELECT
 HORSE.CODE_HORSE,
 HORSE.CODE_FATHER,
 HORSE.CODE_MOTHER,
 HORSE.NAME,
 CAST('' AS VARCHAR(80)),
 0
 FROM HORSE
 WHERE
 HORSE.CODE_HORSE = :CODE_HORSE
 UNION ALL
 SELECT
 HORSE.CODE_HORSE,
 HORSE.CODE_FATHER,
 HORSE.CODE_MOTHER,
 HORSE.NAME,
 'F' || PEDIGREE.MARK,
 PEDIGREE.DEPTH + 1
 FROM HORSE
 JOIN PEDIGREE
 ON HORSE.CODE_HORSE = PEDIGREE.CODE_FATHER
 WHERE
 –- ограничение глубины рекурсии
 PEDIGREE.DEPTH < :MAX_DEPTH
 UNION ALL
 SELECT
 HORSE.CODE_HORSE,
 HORSE.CODE_FATHER,
 HORSE.CODE_MOTHER,
 HORSE.NAME,
 'M' || PEDIGREE.MARK,
 PEDIGREE.DEPTH + 1
 FROM HORSE
 JOIN PEDIGREE
 ON HORSE.CODE_HORSE = PEDIGREE.CODE_MOTHER
 WHERE
 –- ограничение глубины рекурсии
 PEDIGREE.DEPTH < :MAX_DEPTH
)
SELECT
 CODE_HORSE,
 NAME,
 MARK,
 DEPTH
FROM
 PEDIGREE 
Рекурсивный запрос для FireBird.
Оставляю на память, потому как иногда нужен.

Комментариев нет:

Отправить комментарий