По запросу "oracle factorial" с ходу нагугливаются два подхода к вычислению факториала в СУБД Oracle:
-
самоочевидный: в цикле получить произведение натуральных чисел от 1 до n
create or replace function fac1(n pls_integer) return number is f number := 1; begin if n in (0, 1) then return 1; end if; for i in 2..n loop f := f * i; end loop; return f; end fac1; /
-
забавный: вместо произведения натуральных чисел от 1 до n найти сумму их логарифмов, а затем возвести основание логарифма в найденную степень
create or replace function fac2(n pls_integer) return number is f number; begin select round(exp(sum(ln(level)))) into f from dual connect by level <= n; return f; end fac2; /