«ОШИБКА: у запроса нет места назначения для данных результата» - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь создать такую ​​функцию:

Я попытался изменить тип возвращаемого значения на int или text и т. Д., Чтобы увидеть, работает ли код вне этого, но это не так. Я новичок в PostgreSQL, поэтому, пожалуйста, не будьте резкими, если я пропустил что-то очевидное.

create or replace function date_select(i INT) returns void as
$$ 
    begin
        select * from dwh_stg.stg_dce_gift where gift_id = i;
    end
$$ language plpgsql

select date_select(16940)

Ошибка SQL [42601]:

ERROR: query has no destination for result data
Hint: If you want to discard the results of a SELECT, use PERFORM instead.
Where: PL/pgSQL function date_select(integer) line 3 at SQL statement

1 Ответ

1 голос
/ 05 июля 2019

Если вы хотите что-то вернуть, вам нужно определить функцию для возврата чего-либо (не void)

Очевидно, вы хотите вернуть несколько строк из таблицы stg_dec_gift, для этого вам нужно определить функцию как returns setof dwh_stg.stg_dce_gift. Для простой функции, инкапсулирующей запрос, нет необходимости использовать PL / pgSQL, простая функция SQL подойдет просто:

create or replace function date_select(i INT) 
  returns setof dwh_stg.stg_dce_gift --<<  here
as
$$ 
  select * 
  from dwh_stg.stg_dce_gift 
  where gift_id = i;
$$ 
stable
language sql;

Затем используйте его в FROM части:

select *
from date_select(16940);

Онлайн пример: https://rextester.com/WYDCE44062

...