Я обманул и посмотрел Алгоритм Ленивого Кейтерера в Википедии . Это реализация упрощенного варианта формулы:
create or replace function lc_algo
(n in number)
return number as
begin
return (power(n,2) + n + 2) / 2;
end;
/
Я признаю, что он не использует цикл, но трудно понять, зачем кому-то это понадобится. Однако, если ваше задание настаивает на петлях (потому что производительность не ваша сумка), вы идете:
create or replace function lc_algo
(n in number)
return number
as
rv simple_integer := 1;
begin
for i in 1..n loop
rv := rv + i;
end loop;
return rv;
end;
/
Чтобы получить первые десять чисел (с любой версией):
select lc_algo(level) -- assuming you don't want to start with f(0)
from dual
connect by level <= 10
/