#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. Я и это говорил в последнем абзаце. Но да, это верно.