Функция возвращает многократно один и тот же результат
Есть следующая функция:
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 и без всего, выводит одинаковый результат, из-за чего пришел к выводу, что функция как-то зациклилась.
Не могу понять причину проблемы. Вот данные и как вызываю:
select Per_fnc(1) from deliveries;
Ответы (1 шт):
из-за чего пришел к выводу, что функция как-то зациклилась
Нет, не зациклилась. Функция в 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

