Вызов функции plpgsql

#sql #postgresql

Вопрос:

но я не могу это назвать.

 CREATE or replace FUNCTION wyplaty_dla_prac_o_email (threshold_value integer,email_of text)
RETURNS TABLE(f1 int,f2 timestamp)
AS
$
begin
select amount, payment_date from payment p join customer c on p.customer_id=c.customer_id 
where amount > $1 and email =$2;



end;
$
LANGUAGE plpgsql;
 

и когда я назову это

 select * from wyplaty_dla_prac_o_email(6,'dana.hart@sakilacustomer.org')

 

в нем говорится, что ОШИБКА: не было указано, где должны быть сохранены результаты запроса

Ответ №1:

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

Вам нужно вернуть результаты вашего запроса примерно так:

 CREATE or replace FUNCTION wyplaty_dla_prac_o_email (threshold_value integer,email_of text)
RETURNS TABLE(f1 int,f2 timestamp)
AS  $ begin
return query 
  select amount, payment_date from payment p join 
  customer c on p.customer_id=c.customer_id 
  where amount > $1 and email =$2;
end; $
LANGUAGE plpgsql;
 

В качестве альтернативы вы можете просто указать функцию в SQL вместо использования plpgsql, если это просто оболочка вокруг запроса, и сэкономить накладные расходы.

Комментарии:

1. В качестве альтернативы используйте language sql , а затем в return query этом больше нет необходимости

2. Я и это говорил в последнем абзаце. Но да, это верно.