Функция возвращает многократно один и тот же результат

Есть следующая функция:

create or replace FUNCTION PER_FNC 
( ID_Des IN int )
RETURN integer IS 

cursor sr is 
    Select id_d  from deliveries where id_d=ID_Des;

st integer;
se integer;

BEGIN
   open sr;
   fetch sr into st;
   close sr;
Return st;
END PER_FNC;

Создавалась сначала более сложная версия, в попытке разобраться в проблеме функцию упростил максимально. Функция должна выводить Id доставки

Проблема в том,что функция выводит Id доставки столько раз, сколько строк в таблице Deliveries.
В курсоре с distinct, order by, group by и без всего, выводит одинаковый результат, из-за чего пришел к выводу, что функция как-то зациклилась.

Не могу понять причину проблемы. Вот данные и как вызываю:

Таблица Deliveries

select Per_fnc(1) from deliveries;

Вывод функции


Ответы (1 шт):

Автор решения: 0xdb

из-за чего пришел к выводу, что функция как-то зациклилась

Нет, не зациклилась. Функция в SELECT листе будет вызвана для каждой записи результата запроса, независимо от того, что функция делает и каков её результат.

Есть три способа вызвать функцию, первые два в SQL, последний, в PL/SQL контекстах выполнения:

create or replace function func (num  number) return number is
begin return num; end;
/
var res number
--#1
select func (1) res from dual;
--#2
call func (1) into :res;
--#3
execute :res := func (1) 

Все они дадут один и тот же результат:

       RES
----------
         1
→ Ссылка