Факториал в 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
]]>