До меня тут доехало, что с введением CTE (common table expressions) язык SQL стал тьюринг-полным.
Вот несколько примеров:
--Генератор последовательности целых чисел:
with recursive
gen (n) as (
select 1 from RDB$DATABASE
union all
select gen.n + 1 from gen
)
select n from gen
--Генератор последовательности Фибоначчи:
with recursive
gen (n, fib1, fib2) as (
select 1, 1, 1 from RDB$DATABASE
union all
select gen.n + 1, gen.fib1 + gen.fib2, gen.fib1 from gen where n < :p
)
select n, fib2 as fib from gen
--Факториал:
with recursive
gen (n, fact) as (
select 1, 1 from RDB$DATABASE
union all
select gen.n + 1, gen.fact * (gen.n + 1) from gen where n < :p
)
select n, fact from gen
where n = :p
P.S. В примерах используется диалект Firebird 2.1
... << RSDN@Home 1.2.0 alpha 4 rev. 1065>>