Как вернуть содержимое другой функции plpgsql? - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть функция plpgsql func, которая возвращает setof integer.Теперь у меня есть другая функция func2, которая должна вызывать и возвращать func.Должен ли я использовать return next func() или return query select func() здесь?Есть ли разница в исполнении и производительности?Или я должен сделать что-то еще?

create function func2() returns setof integer as $$
begin
    if true then -- logic omitted here
        return next func();
        -- return query select func();
    end if;
end;
$$ language plpgsql;

Я знаю, что могу сохранить результат func() в локальной объявленной переменной, но я не думаю, что это необходимо здесь.Поправь меня, если я ошибаюсь.

Я прочитал документацию и смог найти только return next и return query select в качестве альтернативы для возврата локальной объявленной переменной.Но мне не ясно, есть ли разница между этими двумя в этом случае, если таковые имеются.

Sidenote, return func() не представляется возможным, что удивительно, исходя из фона в обычных процедурных языках(В основном C ++ и Java).

1 Ответ

0 голосов
/ 19 сентября 2018

RETURN NEXT func() не будет работать, потому что это может вернуть только одно значение.Чтобы сделать это, вы должны были бы просмотреть результаты func() и вернуть каждый результат с RETURN NEXT, что излишне сложно.

Гораздо проще использовать

RETURN QUERY SELECT func();

Возвращает все значения результата func() в одном выражении.

PL / pgSQL по синтаксису совершенно отличается от C ++.Он копирует PL / SQL Oracle, который, в свою очередь, является производным от ADA.

...