Если функция возвращает SETOF
, вы можете использовать RETURN QUERY
независимо от того, сколько строк (одна или несколько) функция может вернуть.
CREATE OR REPLACE FUNCTION sch.getrow(
IN gy integer,
IN gw integer,
IN pi uuid)
RETURNS SETOF record AS $$
BEGIN
RETURN QUERY
EXECUTE 'SELECT * FROM sch.foo WHERE gy = $1 AND gw = $2 AND idpi = $3' USING gy, gw, pi;
END
$$
LANGUAGE plpgsql;
Не связано, но важно. Функция не должна быть определена как IMMUTABLE
, поскольку ее результаты зависят от данных, хранящихся в таблице. По документации:
IMMUTABLE указывает, что функция не может изменить базу данных и всегда возвращает один и тот же результат, если даны одинаковые значения аргумента; то есть он не выполняет поиск в базе данных или иным образом не использует информацию, прямо не представленную в списке аргументов.