Факториал в SQL
Пример для версий
Oracle 10g SQL,
Oracle 11g SQL
SQL не поддерживает циклы, рекурсии или пользовательские функции. Данный пример демонстрирует возможный обходной путь, использующий:
-
псевдостолбец
levelдля создания псевдотаблицt1иt2, содержащих числа от 1 до 16, -
агрегатную функцию
sum, позволяющую суммировать элементы множества без явного использования цикла, -
и математические функции
lnиexp, позволяющие заменить произведение (необходимое для вычисления факториала) на сумму (предоставляемую SQL).
Строка “0! = 1” не войдет в набор строк, полученный в результате, т.к. попытка вычислить ln(0) приводит к исключению.
select t2.n || '! = ' || round(exp(sum(ln(t1.n))))
from
( select level n
from dual
connect by level <= 16) t1,
( select level n
from dual
connect by level <= 16) t2
where t1.n<=t2.n
group by t2.n
order by t2.n
Комментарии
]]>blog comments powered by Disqus
]]>